Actually apply the pre-commit fixers to the codebase.
This can be redone manually with `pre-commit run --all` While the pre-commit hook could be merged to run locally, it is much cleaner to align all the files to best-practice syntax in a single commit. It is also required for server-side validation.
This commit is contained in:
parent
108ad3c7c3
commit
b218e62ffc
151 changed files with 42251 additions and 31034 deletions
25
.github/workflows/build.yaml
vendored
25
.github/workflows/build.yaml
vendored
|
@ -4,21 +4,17 @@ jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
-
|
- name: Install Go
|
||||||
name: Install Go
|
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: '1.18.x'
|
go-version: "1.18.x"
|
||||||
-
|
- name: Install node
|
||||||
name: Install node
|
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '17'
|
node-version: "17"
|
||||||
-
|
- name: Checkout code
|
||||||
name: Checkout code
|
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
-
|
- name: Cache Go and npm modules
|
||||||
name: Cache Go and npm modules
|
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
@ -28,12 +24,9 @@ jobs:
|
||||||
web/node_modules
|
web/node_modules
|
||||||
key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }}
|
key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-ntfy-
|
restore-keys: ${{ runner.os }}-ntfy-
|
||||||
-
|
- name: Install dependencies
|
||||||
name: Install dependencies
|
|
||||||
run: make build-deps-ubuntu
|
run: make build-deps-ubuntu
|
||||||
-
|
- name: Build all the things
|
||||||
name: Build all the things
|
|
||||||
run: make build
|
run: make build
|
||||||
-
|
- name: Print build results and checksums
|
||||||
name: Print build results and checksums
|
|
||||||
run: make cli-build-results
|
run: make cli-build-results
|
||||||
|
|
15
.github/workflows/docs.yaml
vendored
15
.github/workflows/docs.yaml
vendored
|
@ -7,11 +7,9 @@ jobs:
|
||||||
publish-docs:
|
publish-docs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
-
|
- name: Checkout ntfy code
|
||||||
name: Checkout ntfy code
|
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
-
|
- name: Checkout docs pages code
|
||||||
name: Checkout docs pages code
|
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
repository: binwiederhier/ntfy-docs.github.io
|
repository: binwiederhier/ntfy-docs.github.io
|
||||||
|
@ -19,14 +17,11 @@ jobs:
|
||||||
token: ${{secrets.NTFY_DOCS_PUSH_TOKEN}}
|
token: ${{secrets.NTFY_DOCS_PUSH_TOKEN}}
|
||||||
# Expires after 1 year, re-generate via
|
# Expires after 1 year, re-generate via
|
||||||
# User -> Settings -> Developer options -> Personal Access Tokens -> Fine Grained Token
|
# User -> Settings -> Developer options -> Personal Access Tokens -> Fine Grained Token
|
||||||
-
|
- name: Build docs
|
||||||
name: Build docs
|
|
||||||
run: make docs
|
run: make docs
|
||||||
-
|
- name: Copy generated docs
|
||||||
name: Copy generated docs
|
|
||||||
run: rsync -av --exclude CNAME --delete server/docs/ build/ntfy-docs.github.io/docs/
|
run: rsync -av --exclude CNAME --delete server/docs/ build/ntfy-docs.github.io/docs/
|
||||||
-
|
- name: Publish docs
|
||||||
name: Publish docs
|
|
||||||
run: |
|
run: |
|
||||||
cd build/ntfy-docs.github.io
|
cd build/ntfy-docs.github.io
|
||||||
git config user.name "GitHub Actions Bot"
|
git config user.name "GitHub Actions Bot"
|
||||||
|
|
30
.github/workflows/release.yaml
vendored
30
.github/workflows/release.yaml
vendored
|
@ -2,26 +2,22 @@ name: release
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
- "v[0-9]+.[0-9]+.[0-9]+"
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
-
|
- name: Install Go
|
||||||
name: Install Go
|
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: '1.18.x'
|
go-version: "1.18.x"
|
||||||
-
|
- name: Install node
|
||||||
name: Install node
|
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '17'
|
node-version: "17"
|
||||||
-
|
- name: Checkout code
|
||||||
name: Checkout code
|
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
-
|
- name: Cache Go and npm modules
|
||||||
name: Cache Go and npm modules
|
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
@ -31,20 +27,16 @@ jobs:
|
||||||
web/node_modules
|
web/node_modules
|
||||||
key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }}
|
key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-ntfy-
|
restore-keys: ${{ runner.os }}-ntfy-
|
||||||
-
|
- name: Docker login
|
||||||
name: Docker login
|
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
||||||
-
|
- name: Install dependencies
|
||||||
name: Install dependencies
|
|
||||||
run: make build-deps-ubuntu
|
run: make build-deps-ubuntu
|
||||||
-
|
- name: Build and publish
|
||||||
name: Build and publish
|
|
||||||
run: make release
|
run: make release
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
-
|
- name: Print build results and checksums
|
||||||
name: Print build results and checksums
|
|
||||||
run: make cli-build-results
|
run: make cli-build-results
|
||||||
|
|
34
.github/workflows/test.yaml
vendored
34
.github/workflows/test.yaml
vendored
|
@ -4,21 +4,17 @@ jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
-
|
- name: Install Go
|
||||||
name: Install Go
|
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: '1.18.x'
|
go-version: "1.18.x"
|
||||||
-
|
- name: Install node
|
||||||
name: Install node
|
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '17'
|
node-version: "17"
|
||||||
-
|
- name: Checkout code
|
||||||
name: Checkout code
|
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
-
|
- name: Cache Go and npm modules
|
||||||
name: Cache Go and npm modules
|
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
@ -28,21 +24,15 @@ jobs:
|
||||||
web/node_modules
|
web/node_modules
|
||||||
key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }}
|
key: ${{ runner.os }}-ntfy-${{ hashFiles('**/go.sum', '**/package.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-ntfy-
|
restore-keys: ${{ runner.os }}-ntfy-
|
||||||
-
|
- name: Install dependencies
|
||||||
name: Install dependencies
|
|
||||||
run: make build-deps-ubuntu
|
run: make build-deps-ubuntu
|
||||||
-
|
- name: Build docs (required for tests)
|
||||||
name: Build docs (required for tests)
|
|
||||||
run: make docs
|
run: make docs
|
||||||
-
|
- name: Build web app (required for tests)
|
||||||
name: Build web app (required for tests)
|
|
||||||
run: make web
|
run: make web
|
||||||
-
|
- name: Run tests, formatting, vetting and linting
|
||||||
name: Run tests, formatting, vetting and linting
|
|
||||||
run: make check
|
run: make check
|
||||||
-
|
- name: Run coverage
|
||||||
name: Run coverage
|
|
||||||
run: make coverage
|
run: make coverage
|
||||||
-
|
- name: Upload coverage to codecov.io
|
||||||
name: Upload coverage to codecov.io
|
|
||||||
run: make coverage-upload
|
run: make coverage-upload
|
||||||
|
|
|
@ -3,12 +3,11 @@ before:
|
||||||
- go mod download
|
- go mod download
|
||||||
- go mod tidy
|
- go mod tidy
|
||||||
builds:
|
builds:
|
||||||
-
|
- id: ntfy_linux_amd64
|
||||||
id: ntfy_linux_amd64
|
|
||||||
binary: ntfy
|
binary: ntfy
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=1 # required for go-sqlite3
|
- CGO_ENABLED=1 # required for go-sqlite3
|
||||||
tags: [sqlite_omit_load_extension,osusergo,netgo]
|
tags: [sqlite_omit_load_extension, osusergo, netgo]
|
||||||
ldflags:
|
ldflags:
|
||||||
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
||||||
goos: [linux]
|
goos: [linux]
|
||||||
|
@ -16,46 +15,42 @@ builds:
|
||||||
hooks:
|
hooks:
|
||||||
post:
|
post:
|
||||||
- upx "{{ .Path }}" # apt install upx
|
- upx "{{ .Path }}" # apt install upx
|
||||||
-
|
- id: ntfy_linux_armv6
|
||||||
id: ntfy_linux_armv6
|
|
||||||
binary: ntfy
|
binary: ntfy
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=1 # required for go-sqlite3
|
- CGO_ENABLED=1 # required for go-sqlite3
|
||||||
- CC=arm-linux-gnueabi-gcc # apt install gcc-arm-linux-gnueabi
|
- CC=arm-linux-gnueabi-gcc # apt install gcc-arm-linux-gnueabi
|
||||||
tags: [sqlite_omit_load_extension,osusergo,netgo]
|
tags: [sqlite_omit_load_extension, osusergo, netgo]
|
||||||
ldflags:
|
ldflags:
|
||||||
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
||||||
goos: [linux]
|
goos: [linux]
|
||||||
goarch: [arm]
|
goarch: [arm]
|
||||||
goarm: [6]
|
goarm: [6]
|
||||||
# No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546
|
# No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546
|
||||||
-
|
- id: ntfy_linux_armv7
|
||||||
id: ntfy_linux_armv7
|
|
||||||
binary: ntfy
|
binary: ntfy
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=1 # required for go-sqlite3
|
- CGO_ENABLED=1 # required for go-sqlite3
|
||||||
- CC=arm-linux-gnueabi-gcc # apt install gcc-arm-linux-gnueabi
|
- CC=arm-linux-gnueabi-gcc # apt install gcc-arm-linux-gnueabi
|
||||||
tags: [sqlite_omit_load_extension,osusergo,netgo]
|
tags: [sqlite_omit_load_extension, osusergo, netgo]
|
||||||
ldflags:
|
ldflags:
|
||||||
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
||||||
goos: [linux]
|
goos: [linux]
|
||||||
goarch: [arm]
|
goarch: [arm]
|
||||||
goarm: [7]
|
goarm: [7]
|
||||||
# No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546
|
# No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546
|
||||||
-
|
- id: ntfy_linux_arm64
|
||||||
id: ntfy_linux_arm64
|
|
||||||
binary: ntfy
|
binary: ntfy
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=1 # required for go-sqlite3
|
- CGO_ENABLED=1 # required for go-sqlite3
|
||||||
- CC=aarch64-linux-gnu-gcc # apt install gcc-aarch64-linux-gnu
|
- CC=aarch64-linux-gnu-gcc # apt install gcc-aarch64-linux-gnu
|
||||||
tags: [sqlite_omit_load_extension,osusergo,netgo]
|
tags: [sqlite_omit_load_extension, osusergo, netgo]
|
||||||
ldflags:
|
ldflags:
|
||||||
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
- "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}"
|
||||||
goos: [linux]
|
goos: [linux]
|
||||||
goarch: [arm64]
|
goarch: [arm64]
|
||||||
# No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546
|
# No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546
|
||||||
-
|
- id: ntfy_windows_amd64
|
||||||
id: ntfy_windows_amd64
|
|
||||||
binary: ntfy
|
binary: ntfy
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=0 # explicitly disable, since we don't need go-sqlite3
|
- CGO_ENABLED=0 # explicitly disable, since we don't need go-sqlite3
|
||||||
|
@ -65,8 +60,7 @@ builds:
|
||||||
goos: [windows]
|
goos: [windows]
|
||||||
goarch: [amd64]
|
goarch: [amd64]
|
||||||
# No "upx" for Windows to hopefully avoid Virus warnings
|
# No "upx" for Windows to hopefully avoid Virus warnings
|
||||||
-
|
- id: ntfy_darwin_all
|
||||||
id: ntfy_darwin_all
|
|
||||||
binary: ntfy
|
binary: ntfy
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=0 # explicitly disable, since we don't need go-sqlite3
|
- CGO_ENABLED=0 # explicitly disable, since we don't need go-sqlite3
|
||||||
|
@ -76,8 +70,7 @@ builds:
|
||||||
goos: [darwin]
|
goos: [darwin]
|
||||||
goarch: [amd64, arm64] # will be combined to "universal binary" (see below)
|
goarch: [amd64, arm64] # will be combined to "universal binary" (see below)
|
||||||
nfpms:
|
nfpms:
|
||||||
-
|
- package_name: ntfy
|
||||||
package_name: ntfy
|
|
||||||
homepage: https://heckel.io/ntfy
|
homepage: https://heckel.io/ntfy
|
||||||
maintainer: Philipp C. Heckel <philipp.heckel@gmail.com>
|
maintainer: Philipp C. Heckel <philipp.heckel@gmail.com>
|
||||||
description: Simple pub-sub notification service
|
description: Simple pub-sub notification service
|
||||||
|
@ -111,8 +104,7 @@ nfpms:
|
||||||
preremove: "scripts/prerm.sh"
|
preremove: "scripts/prerm.sh"
|
||||||
postremove: "scripts/postrm.sh"
|
postremove: "scripts/postrm.sh"
|
||||||
archives:
|
archives:
|
||||||
-
|
- id: ntfy_linux
|
||||||
id: ntfy_linux
|
|
||||||
builds:
|
builds:
|
||||||
- ntfy_linux_amd64
|
- ntfy_linux_amd64
|
||||||
- ntfy_linux_armv6
|
- ntfy_linux_armv6
|
||||||
|
@ -128,8 +120,7 @@ archives:
|
||||||
- client/ntfy-client.service
|
- client/ntfy-client.service
|
||||||
replacements:
|
replacements:
|
||||||
amd64: x86_64
|
amd64: x86_64
|
||||||
-
|
- id: ntfy_windows
|
||||||
id: ntfy_windows
|
|
||||||
builds:
|
builds:
|
||||||
- ntfy_windows_amd64
|
- ntfy_windows_amd64
|
||||||
format: zip
|
format: zip
|
||||||
|
@ -140,8 +131,7 @@ archives:
|
||||||
- client/client.yml
|
- client/client.yml
|
||||||
replacements:
|
replacements:
|
||||||
amd64: x86_64
|
amd64: x86_64
|
||||||
-
|
- id: ntfy_darwin
|
||||||
id: ntfy_darwin
|
|
||||||
builds:
|
builds:
|
||||||
- ntfy_darwin_all
|
- ntfy_darwin_all
|
||||||
wrap_in_directory: true
|
wrap_in_directory: true
|
||||||
|
@ -152,20 +142,19 @@ archives:
|
||||||
replacements:
|
replacements:
|
||||||
darwin: macOS
|
darwin: macOS
|
||||||
universal_binaries:
|
universal_binaries:
|
||||||
-
|
- id: ntfy_darwin_all
|
||||||
id: ntfy_darwin_all
|
|
||||||
replace: true
|
replace: true
|
||||||
name_template: ntfy
|
name_template: ntfy
|
||||||
checksum:
|
checksum:
|
||||||
name_template: 'checksums.txt'
|
name_template: "checksums.txt"
|
||||||
snapshot:
|
snapshot:
|
||||||
name_template: "{{ .Tag }}-next"
|
name_template: "{{ .Tag }}-next"
|
||||||
changelog:
|
changelog:
|
||||||
sort: asc
|
sort: asc
|
||||||
filters:
|
filters:
|
||||||
exclude:
|
exclude:
|
||||||
- '^docs:'
|
- "^docs:"
|
||||||
- '^test:'
|
- "^test:"
|
||||||
dockers:
|
dockers:
|
||||||
- image_templates:
|
- image_templates:
|
||||||
- &amd64_image "binwiederhier/ntfy:{{ .Tag }}-amd64"
|
- &amd64_image "binwiederhier/ntfy:{{ .Tag }}-amd64"
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||||
rev: "v2.7.1"
|
rev: "v3.0.0-alpha.4"
|
||||||
hooks:
|
hooks:
|
||||||
- id: prettier
|
- id: prettier
|
||||||
|
exclude_types: [markdown]
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.4.0
|
rev: v4.4.0
|
||||||
hooks:
|
hooks:
|
||||||
|
@ -12,14 +13,13 @@ repos:
|
||||||
stages: ["commit"]
|
stages: ["commit"]
|
||||||
|
|
||||||
- repo: https://github.com/Bahjat/pre-commit-golang
|
- repo: https://github.com/Bahjat/pre-commit-golang
|
||||||
rev: v1.0.2
|
rev: v1.0.3
|
||||||
hooks:
|
hooks:
|
||||||
- id: go-fmt-import
|
- id: go-fmt-import
|
||||||
- id: go-vet
|
- id: go-vet
|
||||||
- id: go-lint
|
- id: go-lint
|
||||||
- id: go-unit-tests
|
- id: go-unit-tests
|
||||||
stages: ["push"]
|
stages: ["push"]
|
||||||
- id: gofumpt # requires github.com/mvdan/gofumpt
|
|
||||||
- id: golangci-lint # requires github.com/golangci/golangci-lint
|
- id: golangci-lint # requires github.com/golangci/golangci-lint
|
||||||
args: [--config=.github/linters/.golangci.yml] # optional
|
args: [--config=.github/linters/.golangci.yml] # optional
|
||||||
- id: go-ruleguard # requires https://github.com/quasilyte/go-ruleguard
|
- id: go-ruleguard # requires https://github.com/quasilyte/go-ruleguard
|
||||||
|
|
|
@ -130,4 +130,3 @@ For answers to common questions about this code of conduct, see the FAQ at
|
||||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
[FAQ]: https://www.contributor-covenant.org/faq
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
[translations]: https://www.contributor-covenant.org/translations
|
[translations]: https://www.contributor-covenant.org/translations
|
||||||
|
|
||||||
|
|
|
@ -337,4 +337,3 @@ proprietary programs. If your program is a subroutine library, you may
|
||||||
consider it more useful to permit linking proprietary applications with the
|
consider it more useful to permit linking proprietary applications with the
|
||||||
library. If this is what you want to do, use the GNU Lesser General
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
Public License instead of this License.
|
Public License instead of this License.
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,10 @@ import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
_ "github.com/mattn/go-sqlite3" // SQLite driver
|
_ "github.com/mattn/go-sqlite3" // SQLite driver
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package auth_test
|
package auth_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"heckel.io/ntfy/auth"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
const minBcryptTimingMillis = int64(50) // Ideally should be >100ms, but this should also run on a Raspberry Pi without massive resources
|
const minBcryptTimingMillis = int64(50) // Ideally should be >100ms, but this should also run on a Raspberry Pi without massive resources
|
||||||
|
|
|
@ -7,13 +7,14 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"heckel.io/ntfy/log"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Event type constants
|
// Event type constants
|
||||||
|
|
|
@ -2,11 +2,12 @@ package client_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"heckel.io/ntfy/client"
|
"heckel.io/ntfy/client"
|
||||||
"heckel.io/ntfy/test"
|
"heckel.io/ntfy/test"
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestClient_Publish_Subscribe(t *testing.T) {
|
func TestClient_Publish_Subscribe(t *testing.T) {
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package client
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"gopkg.in/yaml.v2"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package client_test
|
package client_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"heckel.io/ntfy/client"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConfig_Load(t *testing.T) {
|
func TestConfig_Load(t *testing.T) {
|
||||||
|
|
|
@ -2,10 +2,11 @@ package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RequestOption is a generic request option that can be added to Client calls
|
// RequestOption is a generic request option that can be added to Client calls
|
||||||
|
|
|
@ -5,6 +5,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"heckel.io/ntfy/auth"
|
"heckel.io/ntfy/auth"
|
||||||
"heckel.io/ntfy/util"
|
"heckel.io/ntfy/util"
|
||||||
|
|
|
@ -2,11 +2,12 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"heckel.io/ntfy/server"
|
"heckel.io/ntfy/server"
|
||||||
"heckel.io/ntfy/test"
|
"heckel.io/ntfy/test"
|
||||||
"testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCLI_Access_Show(t *testing.T) {
|
func TestCLI_Access_Show(t *testing.T) {
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"github.com/urfave/cli/v2/altsrc"
|
"github.com/urfave/cli/v2/altsrc"
|
||||||
"heckel.io/ntfy/log"
|
"heckel.io/ntfy/log"
|
||||||
"os"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -3,11 +3,12 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
"heckel.io/ntfy/client"
|
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This only contains helpers so far
|
// This only contains helpers so far
|
||||||
|
|
|
@ -2,11 +2,12 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"github.com/urfave/cli/v2/altsrc"
|
"github.com/urfave/cli/v2/altsrc"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
"heckel.io/ntfy/util"
|
"heckel.io/ntfy/util"
|
||||||
"os"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// initConfigFileInputSourceFunc is like altsrc.InitInputSourceWithContext and altsrc.NewYamlSourceFromFlagFunc, but checks
|
// initConfigFileInputSourceFunc is like altsrc.InitInputSourceWithContext and altsrc.NewYamlSourceFromFlagFunc, but checks
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewYamlSourceFromFile(t *testing.T) {
|
func TestNewYamlSourceFromFile(t *testing.T) {
|
||||||
|
|
|
@ -3,16 +3,17 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
"heckel.io/ntfy/client"
|
|
||||||
"heckel.io/ntfy/log"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -2,14 +2,15 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"heckel.io/ntfy/test"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/test"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCLI_Publish_Subscribe_Poll_Real_Server(t *testing.T) {
|
func TestCLI_Publish_Subscribe_Poll_Real_Server(t *testing.T) {
|
||||||
|
|
|
@ -3,16 +3,17 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
"heckel.io/ntfy/client"
|
|
||||||
"heckel.io/ntfy/log"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"os/user"
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"heckel.io/ntfy/server"
|
"heckel.io/ntfy/server"
|
||||||
"heckel.io/ntfy/test"
|
"heckel.io/ntfy/test"
|
||||||
"path/filepath"
|
|
||||||
"testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCLI_User_Add(t *testing.T) {
|
func TestCLI_User_Add(t *testing.T) {
|
||||||
|
|
|
@ -6,7 +6,7 @@ services:
|
||||||
command:
|
command:
|
||||||
- serve
|
- serve
|
||||||
environment:
|
environment:
|
||||||
- TZ=UTC # optional: Change to your desired timezone
|
- TZ=UTC # optional: Change to your desired timezone
|
||||||
user: UID:GID # optional: Set custom user/group or uid/gid
|
user: UID:GID # optional: Set custom user/group or uid/gid
|
||||||
volumes:
|
volumes:
|
||||||
- /var/cache/ntfy:/var/cache/ntfy
|
- /var/cache/ntfy:/var/cache/ntfy
|
||||||
|
@ -14,4 +14,3 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- 80:80
|
- 80:80
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
|
|
|
@ -1099,4 +1099,3 @@ OPTIONS:
|
||||||
--visitor-subscription-limit value, --visitor_subscription_limit value number of subscriptions per visitor (default: 30) [$NTFY_VISITOR_SUBSCRIPTION_LIMIT]
|
--visitor-subscription-limit value, --visitor_subscription_limit value number of subscriptions per visitor (default: 30) [$NTFY_VISITOR_SUBSCRIPTION_LIMIT]
|
||||||
--web-root value, --web_root value sets web root to landing page (home), web app (app) or disabled (disable) (default: "app") [$NTFY_WEB_ROOT]
|
--web-root value, --web_root value sets web root to landing page (home), web app (app) or disabled (disable) (default: "app") [$NTFY_WEB_ROOT]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -57,4 +57,3 @@ just the server.
|
||||||
$ ntfy serve
|
$ ntfy serve
|
||||||
2021/12/17 08:16:01 Listening on :80/http
|
2021/12/17 08:16:01 Listening on :80/http
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -570,5 +570,3 @@ Example `template.html`:
|
||||||
|
|
||||||
Add notification on Rundeck (attachment type must be: `Attached as file to email`):
|
Add notification on Rundeck (attachment type must be: `Attached as file to email`):
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,5 +91,3 @@ Here's another video showing the entire process:
|
||||||
<video controls muted autoplay loop width="650" src="static/img/android-video-overview.mp4"></video>
|
<video controls muted autoplay loop width="650" src="static/img/android-video-overview.mp4"></video>
|
||||||
<figcaption>Sending push notifications to your Android phone</figcaption>
|
<figcaption>Sending push notifications to your Android phone</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
|
|
||||||
|
|
131
docs/static/css/extra.css
vendored
131
docs/static/css/extra.css
vendored
|
@ -1,130 +1,133 @@
|
||||||
:root > * {
|
:root > * {
|
||||||
--md-primary-fg-color: #338574;
|
--md-primary-fg-color: #338574;
|
||||||
--md-primary-fg-color--light: #338574;
|
--md-primary-fg-color--light: #338574;
|
||||||
--md-primary-fg-color--dark: #338574;
|
--md-primary-fg-color--dark: #338574;
|
||||||
}
|
}
|
||||||
|
|
||||||
.md-header__button.md-logo :is(img, svg) {
|
.md-header__button.md-logo :is(img, svg) {
|
||||||
width: unset !important;
|
width: unset !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.md-header__topic:first-child {
|
.md-header__topic:first-child {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.md-typeset h4 {
|
.md-typeset h4 {
|
||||||
font-weight: 500 !important;
|
font-weight: 500 !important;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
font-size: 1.1em !important;
|
font-size: 1.1em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.admonition {
|
.admonition {
|
||||||
font-size: .74rem !important;
|
font-size: 0.74rem !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
article {
|
article {
|
||||||
padding-bottom: 50px;
|
padding-bottom: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
figure img, figure video {
|
figure img,
|
||||||
border-radius: 7px;
|
figure video {
|
||||||
|
border-radius: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body[data-md-color-scheme="default"] figure img, body[data-md-color-scheme="default"] figure video {
|
body[data-md-color-scheme="default"] figure img,
|
||||||
filter: drop-shadow(3px 3px 3px #ccc);
|
body[data-md-color-scheme="default"] figure video {
|
||||||
|
filter: drop-shadow(3px 3px 3px #ccc);
|
||||||
}
|
}
|
||||||
|
|
||||||
body[data-md-color-scheme="slate"] figure img, body[data-md-color-scheme="slate"] figure video {
|
body[data-md-color-scheme="slate"] figure img,
|
||||||
filter: drop-shadow(3px 3px 3px #1a1313);
|
body[data-md-color-scheme="slate"] figure video {
|
||||||
|
filter: drop-shadow(3px 3px 3px #1a1313);
|
||||||
}
|
}
|
||||||
|
|
||||||
figure video {
|
figure video {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-height: 450px;
|
max-height: 450px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.remove-md-box {
|
.remove-md-box {
|
||||||
background: none;
|
background: none;
|
||||||
border: none;
|
border: none;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.remove-md-box td {
|
.remove-md-box td {
|
||||||
padding: 0 10px
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lightbox; thanks to https://yossiabramov.com/blog/vanilla-js-lightbox */
|
/* Lightbox; thanks to https://yossiabramov.com/blog/vanilla-js-lightbox */
|
||||||
|
|
||||||
.screenshots {
|
.screenshots {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.screenshots img {
|
.screenshots img {
|
||||||
max-height: 230px;
|
max-height: 230px;
|
||||||
max-width: 300px;
|
max-width: 300px;
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
filter: drop-shadow(2px 2px 2px #ddd);
|
filter: drop-shadow(2px 2px 2px #ddd);
|
||||||
}
|
}
|
||||||
|
|
||||||
.screenshots .nowrap {
|
.screenshots .nowrap {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox {
|
.lightbox {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left:0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: all 0.15s ease-in;
|
transition: all 0.15s ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox.show {
|
.lightbox.show {
|
||||||
background-color: rgba(0,0,0, 0.75);
|
background-color: rgba(0, 0, 0, 0.75);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox img {
|
.lightbox img {
|
||||||
max-width: 90%;
|
max-width: 90%;
|
||||||
max-height: 90%;
|
max-height: 90%;
|
||||||
filter: drop-shadow(5px 5px 10px #222);
|
filter: drop-shadow(5px 5px 10px #222);
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox {
|
.lightbox .close-lightbox {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 30px;
|
top: 30px;
|
||||||
right: 30px;
|
right: 30px;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox::after,
|
.lightbox .close-lightbox::after,
|
||||||
.lightbox .close-lightbox::before {
|
.lightbox .close-lightbox::before {
|
||||||
content: '';
|
content: "";
|
||||||
width: 3px;
|
width: 3px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
background-color: #ddd;
|
background-color: #ddd;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox::before {
|
.lightbox .close-lightbox::before {
|
||||||
transform: rotate(-45deg);
|
transform: rotate(-45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox:hover::after,
|
.lightbox .close-lightbox:hover::after,
|
||||||
.lightbox .close-lightbox:hover::before {
|
.lightbox .close-lightbox:hover::before {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
136
docs/static/js/extra.js
vendored
136
docs/static/js/extra.js
vendored
|
@ -1,99 +1,109 @@
|
||||||
// Link tabs, as per https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/#linked-tabs
|
// Link tabs, as per https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/#linked-tabs
|
||||||
|
|
||||||
const savedCodeTab = localStorage.getItem('savedTab')
|
const savedCodeTab = localStorage.getItem("savedTab");
|
||||||
const codeTabs = document.querySelectorAll(".tabbed-set > input")
|
const codeTabs = document.querySelectorAll(".tabbed-set > input");
|
||||||
for (const tab of codeTabs) {
|
for (const tab of codeTabs) {
|
||||||
tab.addEventListener("click", () => {
|
tab.addEventListener("click", () => {
|
||||||
const current = document.querySelector(`label[for=${tab.id}]`)
|
const current = document.querySelector(`label[for=${tab.id}]`);
|
||||||
const pos = current.getBoundingClientRect().top
|
const pos = current.getBoundingClientRect().top;
|
||||||
const labelContent = current.innerHTML
|
const labelContent = current.innerHTML;
|
||||||
const labels = document.querySelectorAll('.tabbed-set > label, .tabbed-alternate > .tabbed-labels > label')
|
const labels = document.querySelectorAll(
|
||||||
for (const label of labels) {
|
".tabbed-set > label, .tabbed-alternate > .tabbed-labels > label",
|
||||||
if (label.innerHTML === labelContent) {
|
);
|
||||||
document.querySelector(`input[id=${label.getAttribute('for')}]`).checked = true
|
for (const label of labels) {
|
||||||
}
|
if (label.innerHTML === labelContent) {
|
||||||
}
|
document.querySelector(
|
||||||
|
`input[id=${label.getAttribute("for")}]`,
|
||||||
// Preserve scroll position
|
).checked = true;
|
||||||
const delta = (current.getBoundingClientRect().top) - pos
|
}
|
||||||
window.scrollBy(0, delta)
|
|
||||||
|
|
||||||
// Save
|
|
||||||
localStorage.setItem('savedTab', labelContent)
|
|
||||||
})
|
|
||||||
|
|
||||||
// Select saved tab
|
|
||||||
const current = document.querySelector(`label[for=${tab.id}]`)
|
|
||||||
const labelContent = current.innerHTML
|
|
||||||
if (savedCodeTab === labelContent) {
|
|
||||||
tab.checked = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Preserve scroll position
|
||||||
|
const delta = current.getBoundingClientRect().top - pos;
|
||||||
|
window.scrollBy(0, delta);
|
||||||
|
|
||||||
|
// Save
|
||||||
|
localStorage.setItem("savedTab", labelContent);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Select saved tab
|
||||||
|
const current = document.querySelector(`label[for=${tab.id}]`);
|
||||||
|
const labelContent = current.innerHTML;
|
||||||
|
if (savedCodeTab === labelContent) {
|
||||||
|
tab.checked = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lightbox for screenshot
|
// Lightbox for screenshot
|
||||||
|
|
||||||
const lightbox = document.createElement('div');
|
const lightbox = document.createElement("div");
|
||||||
lightbox.classList.add('lightbox');
|
lightbox.classList.add("lightbox");
|
||||||
document.body.appendChild(lightbox);
|
document.body.appendChild(lightbox);
|
||||||
|
|
||||||
const showScreenshotOverlay = (e, el, group, index) => {
|
const showScreenshotOverlay = (e, el, group, index) => {
|
||||||
lightbox.classList.add('show');
|
lightbox.classList.add("show");
|
||||||
document.addEventListener('keydown', nextScreenshotKeyboardListener);
|
document.addEventListener("keydown", nextScreenshotKeyboardListener);
|
||||||
return showScreenshot(e, group, index);
|
return showScreenshot(e, group, index);
|
||||||
};
|
};
|
||||||
|
|
||||||
const showScreenshot = (e, group, index) => {
|
const showScreenshot = (e, group, index) => {
|
||||||
const actualIndex = resolveScreenshotIndex(group, index);
|
const actualIndex = resolveScreenshotIndex(group, index);
|
||||||
lightbox.innerHTML = '<div class="close-lightbox"></div>' + screenshots[group][actualIndex].innerHTML;
|
lightbox.innerHTML =
|
||||||
lightbox.querySelector('img').onclick = (e) => { return showScreenshot(e, group, actualIndex+1); };
|
'<div class="close-lightbox"></div>' +
|
||||||
currentScreenshotGroup = group;
|
screenshots[group][actualIndex].innerHTML;
|
||||||
currentScreenshotIndex = actualIndex;
|
lightbox.querySelector("img").onclick = (e) => {
|
||||||
e.stopPropagation();
|
return showScreenshot(e, group, actualIndex + 1);
|
||||||
return false;
|
};
|
||||||
|
currentScreenshotGroup = group;
|
||||||
|
currentScreenshotIndex = actualIndex;
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const nextScreenshot = (e) => {
|
const nextScreenshot = (e) => {
|
||||||
return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex+1);
|
return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const previousScreenshot = (e) => {
|
const previousScreenshot = (e) => {
|
||||||
return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex-1);
|
return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex - 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const resolveScreenshotIndex = (group, index) => {
|
const resolveScreenshotIndex = (group, index) => {
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
return screenshots[group].length - 1;
|
return screenshots[group].length - 1;
|
||||||
} else if (index > screenshots[group].length - 1) {
|
} else if (index > screenshots[group].length - 1) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return index;
|
return index;
|
||||||
};
|
};
|
||||||
|
|
||||||
const hideScreenshotOverlay = (e) => {
|
const hideScreenshotOverlay = (e) => {
|
||||||
lightbox.classList.remove('show');
|
lightbox.classList.remove("show");
|
||||||
document.removeEventListener('keydown', nextScreenshotKeyboardListener);
|
document.removeEventListener("keydown", nextScreenshotKeyboardListener);
|
||||||
};
|
};
|
||||||
|
|
||||||
const nextScreenshotKeyboardListener = (e) => {
|
const nextScreenshotKeyboardListener = (e) => {
|
||||||
switch (e.keyCode) {
|
switch (e.keyCode) {
|
||||||
case 37:
|
case 37:
|
||||||
previousScreenshot(e);
|
previousScreenshot(e);
|
||||||
break;
|
break;
|
||||||
case 39:
|
case 39:
|
||||||
nextScreenshot(e);
|
nextScreenshot(e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let currentScreenshotGroup = '';
|
let currentScreenshotGroup = "";
|
||||||
let currentScreenshotIndex = 0;
|
let currentScreenshotIndex = 0;
|
||||||
let screenshots = {};
|
let screenshots = {};
|
||||||
Array.from(document.getElementsByClassName('screenshots')).forEach((sg) => {
|
Array.from(document.getElementsByClassName("screenshots")).forEach((sg) => {
|
||||||
const group = sg.id;
|
const group = sg.id;
|
||||||
screenshots[group] = [...sg.querySelectorAll('a')];
|
screenshots[group] = [...sg.querySelectorAll("a")];
|
||||||
screenshots[group].forEach((el, index) => {
|
screenshots[group].forEach((el, index) => {
|
||||||
el.onclick = (e) => { return showScreenshotOverlay(e, el, group, index); };
|
el.onclick = (e) => {
|
||||||
});
|
return showScreenshotOverlay(e, el, group, index);
|
||||||
|
};
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
lightbox.onclick = hideScreenshotOverlay;
|
lightbox.onclick = hideScreenshotOverlay;
|
||||||
|
|
|
@ -1,56 +1,64 @@
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<title>ntfy.sh: EventSource Example</title>
|
<title>ntfy.sh: EventSource Example</title>
|
||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<style>
|
<style>
|
||||||
body { font-size: 1.2em; line-height: 130%; }
|
body {
|
||||||
#events { font-family: monospace; }
|
font-size: 1.2em;
|
||||||
|
line-height: 130%;
|
||||||
|
}
|
||||||
|
#events {
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>ntfy.sh: EventSource Example</h1>
|
<h1>ntfy.sh: EventSource Example</h1>
|
||||||
<p>
|
<p>
|
||||||
This is an example showing how to use <a href="https://ntfy.sh">ntfy.sh</a> with
|
This is an example showing how to use
|
||||||
<a href="https://developer.mozilla.org/en-US/docs/Web/API/EventSource">EventSource</a>.<br/>
|
<a href="https://ntfy.sh">ntfy.sh</a> with
|
||||||
This example doesn't need a server. You can just save the HTML page and run it from anywhere.
|
<a href="https://developer.mozilla.org/en-US/docs/Web/API/EventSource"
|
||||||
</p>
|
>EventSource</a
|
||||||
<button id="publishButton">Send test notification</button>
|
>.<br />
|
||||||
<p><b>Log:</b></p>
|
This example doesn't need a server. You can just save the HTML page and
|
||||||
<div id="events"></div>
|
run it from anywhere.
|
||||||
|
</p>
|
||||||
|
<button id="publishButton">Send test notification</button>
|
||||||
|
<p><b>Log:</b></p>
|
||||||
|
<div id="events"></div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const publishURL = `https://ntfy.sh/example`;
|
const publishURL = `https://ntfy.sh/example`;
|
||||||
const subscribeURL = `https://ntfy.sh/example/sse`;
|
const subscribeURL = `https://ntfy.sh/example/sse`;
|
||||||
const events = document.getElementById('events');
|
const events = document.getElementById("events");
|
||||||
const eventSource = new EventSource(subscribeURL);
|
const eventSource = new EventSource(subscribeURL);
|
||||||
|
|
||||||
// Publish button
|
// Publish button
|
||||||
document.getElementById("publishButton").onclick = () => {
|
document.getElementById("publishButton").onclick = () => {
|
||||||
fetch(publishURL, {
|
fetch(publishURL, {
|
||||||
method: 'POST', // works with PUT as well, though that sends an OPTIONS request too!
|
method: "POST", // works with PUT as well, though that sends an OPTIONS request too!
|
||||||
body: `It is ${new Date().toString()}. This is a test.`
|
body: `It is ${new Date().toString()}. This is a test.`,
|
||||||
})
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Incoming events
|
// Incoming events
|
||||||
eventSource.onopen = () => {
|
eventSource.onopen = () => {
|
||||||
let event = document.createElement('div');
|
let event = document.createElement("div");
|
||||||
event.innerHTML = `EventSource connected to ${subscribeURL}`;
|
event.innerHTML = `EventSource connected to ${subscribeURL}`;
|
||||||
events.appendChild(event);
|
events.appendChild(event);
|
||||||
};
|
};
|
||||||
eventSource.onerror = (e) => {
|
eventSource.onerror = (e) => {
|
||||||
let event = document.createElement('div');
|
let event = document.createElement("div");
|
||||||
event.innerHTML = `EventSource error: Failed to connect to ${subscribeURL}`;
|
event.innerHTML = `EventSource error: Failed to connect to ${subscribeURL}`;
|
||||||
events.appendChild(event);
|
events.appendChild(event);
|
||||||
};
|
};
|
||||||
eventSource.onmessage = (e) => {
|
eventSource.onmessage = (e) => {
|
||||||
let event = document.createElement('div');
|
let event = document.createElement("div");
|
||||||
event.innerHTML = e.data;
|
event.innerHTML = e.data;
|
||||||
events.appendChild(event);
|
events.appendChild(event);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
</body>
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
|
5
main.go
5
main.go
|
@ -2,10 +2,11 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/urfave/cli/v2"
|
|
||||||
"heckel.io/ntfy/cmd"
|
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
48
mkdocs.yml
48
mkdocs.yml
|
@ -15,12 +15,12 @@ theme:
|
||||||
include_search_page: false
|
include_search_page: false
|
||||||
search_index_only: true
|
search_index_only: true
|
||||||
palette:
|
palette:
|
||||||
- media: "(prefers-color-scheme: light)" # Light mode
|
- media: "(prefers-color-scheme: light)" # Light mode
|
||||||
scheme: default
|
scheme: default
|
||||||
toggle:
|
toggle:
|
||||||
icon: material/lightbulb-outline
|
icon: material/lightbulb-outline
|
||||||
name: Switch to dark mode
|
name: Switch to dark mode
|
||||||
- media: "(prefers-color-scheme: dark)" # Dark mode
|
- media: "(prefers-color-scheme: dark)" # Dark mode
|
||||||
scheme: slate
|
scheme: slate
|
||||||
accent: indigo
|
accent: indigo
|
||||||
toggle:
|
toggle:
|
||||||
|
@ -71,26 +71,24 @@ plugins:
|
||||||
minify_html: true
|
minify_html: true
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
- "Getting started": index.md
|
- "Getting started": index.md
|
||||||
- "Publishing":
|
- "Publishing":
|
||||||
- "Sending messages": publish.md
|
- "Sending messages": publish.md
|
||||||
- "Subscribing":
|
- "Subscribing":
|
||||||
- "From your phone": subscribe/phone.md
|
- "From your phone": subscribe/phone.md
|
||||||
- "From the Web UI": subscribe/web.md
|
- "From the Web UI": subscribe/web.md
|
||||||
- "From the CLI": subscribe/cli.md
|
- "From the CLI": subscribe/cli.md
|
||||||
- "Using the API": subscribe/api.md
|
- "Using the API": subscribe/api.md
|
||||||
- "Self-hosting":
|
- "Self-hosting":
|
||||||
- "Installation": install.md
|
- "Installation": install.md
|
||||||
- "Configuration": config.md
|
- "Configuration": config.md
|
||||||
- "Other things":
|
- "Other things":
|
||||||
- "FAQs": faq.md
|
- "FAQs": faq.md
|
||||||
- "Examples": examples.md
|
- "Examples": examples.md
|
||||||
- "Integrations + projects": integrations.md
|
- "Integrations + projects": integrations.md
|
||||||
- "Release notes": releases.md
|
- "Release notes": releases.md
|
||||||
- "Emojis 🥳 🎉": emojis.md
|
- "Emojis 🥳 🎉": emojis.md
|
||||||
- "Known issues": known-issues.md
|
- "Known issues": known-issues.md
|
||||||
- "Deprecation notices": deprecations.md
|
- "Deprecation notices": deprecations.md
|
||||||
- "Development": develop.md
|
- "Development": develop.md
|
||||||
- "Privacy policy": privacy.md
|
- "Privacy policy": privacy.md
|
||||||
|
|
||||||
|
|
||||||
|
|
39341
scripts/emoji.json
39341
scripts/emoji.json
File diff suppressed because it is too large
Load diff
|
@ -7,4 +7,3 @@ if [ "$1" = "purge" ] || [ "$1" = "0" ]; then
|
||||||
rm -f /etc/ntfy/server.yml /etc/ntfy/client.yml
|
rm -f /etc/ntfy/server.yml /etc/ntfy/client.yml
|
||||||
rmdir /etc/ntfy || true
|
rmdir /etc/ntfy || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,11 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestParseActions(t *testing.T) {
|
func TestParseActions(t *testing.T) {
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package server_test
|
package server_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"heckel.io/ntfy/server"
|
"heckel.io/ntfy/server"
|
||||||
"testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConfig_New(t *testing.T) {
|
func TestConfig_New(t *testing.T) {
|
||||||
|
|
|
@ -3,13 +3,14 @@ package server
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -3,12 +3,13 @@ package server
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -4,14 +4,15 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
firebase "firebase.google.com/go/v4"
|
firebase "firebase.google.com/go/v4"
|
||||||
"firebase.google.com/go/v4/messaging"
|
"firebase.google.com/go/v4/messaging"
|
||||||
"fmt"
|
|
||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
"heckel.io/ntfy/auth"
|
"heckel.io/ntfy/auth"
|
||||||
"heckel.io/ntfy/log"
|
"heckel.io/ntfy/log"
|
||||||
"heckel.io/ntfy/util"
|
"heckel.io/ntfy/util"
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -4,11 +4,12 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"heckel.io/ntfy/log"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Matrix Push Gateway / UnifiedPush / ntfy integration:
|
// Matrix Push Gateway / UnifiedPush / ntfy integration:
|
||||||
|
|
|
@ -172,7 +172,7 @@ func TestServer_StaticSites(t *testing.T) {
|
||||||
|
|
||||||
rr = request(t, s, "GET", "/static/css/home.css", "", nil)
|
rr = request(t, s, "GET", "/static/css/home.css", "", nil)
|
||||||
require.Equal(t, 200, rr.Code)
|
require.Equal(t, 200, rr.Code)
|
||||||
require.Contains(t, rr.Body.String(), `html, body {`)
|
require.Contains(t, rr.Body.String(), "html,\nbody {")
|
||||||
|
|
||||||
rr = request(t, s, "GET", "/docs", "", nil)
|
rr = request(t, s, "GET", "/docs", "", nil)
|
||||||
require.Equal(t, 301, rr.Code)
|
require.Equal(t, 301, rr.Code)
|
||||||
|
|
|
@ -4,14 +4,15 @@ import (
|
||||||
_ "embed" // required by go:embed
|
_ "embed" // required by go:embed
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"heckel.io/ntfy/log"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"mime"
|
"mime"
|
||||||
"net"
|
"net"
|
||||||
"net/smtp"
|
"net/smtp"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mailer interface {
|
type mailer interface {
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFormatMail_Basic(t *testing.T) {
|
func TestFormatMail_Basic(t *testing.T) {
|
||||||
|
|
|
@ -4,8 +4,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/emersion/go-smtp"
|
|
||||||
"heckel.io/ntfy/log"
|
|
||||||
"io"
|
"io"
|
||||||
"mime"
|
"mime"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
|
@ -15,6 +13,9 @@ import (
|
||||||
"net/mail"
|
"net/mail"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/emersion/go-smtp"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/emersion/go-smtp"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/emersion/go-smtp"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSmtpBackend_Multipart(t *testing.T) {
|
func TestSmtpBackend_Multipart(t *testing.T) {
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"heckel.io/ntfy/log"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
// topic represents a channel to which subscribers can subscribe, and publishers
|
// topic represents a channel to which subscribers can subscribe, and publishers
|
||||||
|
|
|
@ -2,11 +2,12 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/emersion/go-smtp"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"github.com/emersion/go-smtp"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readBoolParam(r *http.Request, defaultValue bool, names ...string) bool {
|
func readBoolParam(r *http.Request, defaultValue bool, names ...string) bool {
|
||||||
|
|
|
@ -3,11 +3,12 @@ package server
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestReadBoolParam(t *testing.T) {
|
func TestReadBoolParam(t *testing.T) {
|
||||||
|
|
|
@ -2,12 +2,13 @@ package test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"heckel.io/ntfy/server"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"heckel.io/ntfy/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -2,13 +2,14 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
firebase "firebase.google.com/go/v4"
|
|
||||||
"firebase.google.com/go/v4/messaging"
|
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"google.golang.org/api/option"
|
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
firebase "firebase.google.com/go/v4"
|
||||||
|
"firebase.google.com/go/v4/messaging"
|
||||||
|
"google.golang.org/api/option"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package util_test
|
package util_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"heckel.io/ntfy/util"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestBatchingQueue_InfTimeout(t *testing.T) {
|
func TestBatchingQueue_InfTimeout(t *testing.T) {
|
||||||
|
|
|
@ -2,9 +2,10 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSniffWriter_WriteHTML(t *testing.T) {
|
func TestSniffWriter_WriteHTML(t *testing.T) {
|
||||||
|
|
|
@ -2,11 +2,12 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"embed"
|
"embed"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -2,11 +2,12 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGzipHandler(t *testing.T) {
|
func TestGzipHandler(t *testing.T) {
|
||||||
|
|
|
@ -2,10 +2,11 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"golang.org/x/time/rate"
|
|
||||||
"io"
|
"io"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/time/rate"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ErrLimitReached is the error returned by the Limiter and LimitWriter when the predefined limit has been reached
|
// ErrLimitReached is the error returned by the Limiter and LimitWriter when the predefined limit has been reached
|
||||||
|
|
|
@ -2,9 +2,10 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFixedLimiter_Add(t *testing.T) {
|
func TestFixedLimiter_Add(t *testing.T) {
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"io"
|
"io"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestPeak_LimitReached(t *testing.T) {
|
func TestPeak_LimitReached(t *testing.T) {
|
||||||
|
|
|
@ -2,11 +2,12 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/olebedev/when"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/olebedev/when"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
// The actual config is dynamically generated server-side.
|
// The actual config is dynamically generated server-side.
|
||||||
|
|
||||||
var config = {
|
var config = {
|
||||||
appRoot: "/",
|
appRoot: "/",
|
||||||
disallowedTopics: ["docs", "static", "file", "app", "settings"]
|
disallowedTopics: ["docs", "static", "file", "app", "settings"],
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,182 +1,266 @@
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
|
|
||||||
<title>ntfy.sh | Send push notifications to your phone via PUT/POST</title>
|
<title>ntfy.sh | Send push notifications to your phone via PUT/POST</title>
|
||||||
<link rel="stylesheet" href="static/css/home.css" type="text/css">
|
<link rel="stylesheet" href="static/css/home.css" type="text/css" />
|
||||||
|
|
||||||
<!-- Mobile view -->
|
<!-- Mobile view -->
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
|
<meta
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
name="viewport"
|
||||||
<meta name="HandheldFriendly" content="true">
|
content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
|
||||||
|
/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
|
<meta name="HandheldFriendly" content="true" />
|
||||||
|
|
||||||
<!-- Mobile browsers, background color -->
|
<!-- Mobile browsers, background color -->
|
||||||
<meta name="theme-color" content="#317f6f">
|
<meta name="theme-color" content="#317f6f" />
|
||||||
<meta name="msapplication-navbutton-color" content="#317f6f">
|
<meta name="msapplication-navbutton-color" content="#317f6f" />
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="#317f6f">
|
<meta name="apple-mobile-web-app-status-bar-style" content="#317f6f" />
|
||||||
|
|
||||||
<!-- Favicon, see favicon.io -->
|
<!-- Favicon, see favicon.io -->
|
||||||
<link rel="icon" type="image/png" href="static/img/favicon.png">
|
<link rel="icon" type="image/png" href="static/img/favicon.png" />
|
||||||
|
|
||||||
<!-- Previews in Google, Slack, WhatsApp, etc. -->
|
<!-- Previews in Google, Slack, WhatsApp, etc. -->
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:locale" content="en_US" />
|
<meta property="og:locale" content="en_US" />
|
||||||
<meta property="og:site_name" content="ntfy.sh" />
|
<meta property="og:site_name" content="ntfy.sh" />
|
||||||
<meta property="og:title" content="ntfy.sh | Push notifications to your phone or desktop via PUT/POST" />
|
<meta
|
||||||
<meta property="og:description" content="ntfy is a simple HTTP-based pub-sub notification service. It allows you to send desktop notifications via scripts from any computer, entirely without signup or cost. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy." />
|
property="og:title"
|
||||||
|
content="ntfy.sh | Push notifications to your phone or desktop via PUT/POST"
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
property="og:description"
|
||||||
|
content="ntfy is a simple HTTP-based pub-sub notification service. It allows you to send desktop notifications via scripts from any computer, entirely without signup or cost. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy."
|
||||||
|
/>
|
||||||
<meta property="og:image" content="/static/img/ntfy.png" />
|
<meta property="og:image" content="/static/img/ntfy.png" />
|
||||||
<meta property="og:url" content="https://ntfy.sh" />
|
<meta property="og:url" content="https://ntfy.sh" />
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="stylesheet" href="static/css/fonts.css" type="text/css">
|
<link rel="stylesheet" href="static/css/fonts.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<nav id="header">
|
||||||
<nav id="header">
|
<div id="headerBox">
|
||||||
<div id="headerBox">
|
<img id="logo" src="static/img/ntfy.png" alt="logo" />
|
||||||
<img id="logo" src="static/img/ntfy.png" alt="logo"/>
|
|
||||||
<div id="name">ntfy</div>
|
<div id="name">ntfy</div>
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="app">Web app</a></li>
|
<li><a href="app">Web app</a></li>
|
||||||
<li><a href="docs/subscribe/phone/">Android/iOS</a></li>
|
<li><a href="docs/subscribe/phone/">Android/iOS</a></li>
|
||||||
<li><a href="docs/">Docs</a></li>
|
<li><a href="docs/">Docs</a></li>
|
||||||
<li><a href="docs/publish/">API</a></li>
|
<li><a href="docs/publish/">API</a></li>
|
||||||
<li><a href="https://github.com/binwiederhier/ntfy">GitHub</a></li>
|
<li><a href="https://github.com/binwiederhier/ntfy">GitHub</a></li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
<div id="main">
|
<div id="main">
|
||||||
<h1>Send push notifications to your phone or desktop via PUT/POST</h1>
|
<h1>Send push notifications to your phone or desktop via PUT/POST</h1>
|
||||||
<p>
|
<p>
|
||||||
<b>ntfy</b> (pronounce: <i>notify</i>) is a simple HTTP-based <a href="https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern">pub-sub</a> notification service.
|
<b>ntfy</b> (pronounce: <i>notify</i>) is a simple HTTP-based
|
||||||
It allows you to send notifications to your phone or desktop via scripts from any computer,
|
<a
|
||||||
entirely <b>without signup, cost or setup</b>. It's also <a href="https://github.com/binwiederhier/ntfy">open source</a> if you want to run your own.
|
href="https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern"
|
||||||
</p>
|
>pub-sub</a
|
||||||
<div id="screenshots">
|
>
|
||||||
<a href="static/img/screenshot-curl.png"><img src="static/img/screenshot-curl.png"/></a>
|
notification service. It allows you to send notifications to your phone
|
||||||
<a href="static/img/screenshot-web-detail.png"><img src="static/img/screenshot-web-detail.png"/></a>
|
or desktop via scripts from any computer, entirely
|
||||||
|
<b>without signup, cost or setup</b>. It's also
|
||||||
|
<a href="https://github.com/binwiederhier/ntfy">open source</a> if you
|
||||||
|
want to run your own.
|
||||||
|
</p>
|
||||||
|
<div id="screenshots">
|
||||||
|
<a href="static/img/screenshot-curl.png"
|
||||||
|
><img src="static/img/screenshot-curl.png"
|
||||||
|
/></a>
|
||||||
|
<a href="static/img/screenshot-web-detail.png"
|
||||||
|
><img src="static/img/screenshot-web-detail.png"
|
||||||
|
/></a>
|
||||||
<span class="nowrap">
|
<span class="nowrap">
|
||||||
<a href="static/img/screenshot-phone-main.jpg"><img src="static/img/screenshot-phone-main.jpg"/></a>
|
<a href="static/img/screenshot-phone-main.jpg"
|
||||||
<a href="static/img/screenshot-phone-detail.jpg"><img src="static/img/screenshot-phone-detail.jpg"/></a>
|
><img src="static/img/screenshot-phone-main.jpg"
|
||||||
<a href="static/img/screenshot-phone-notification.jpg"><img src="static/img/screenshot-phone-notification.jpg"/></a>
|
/></a>
|
||||||
|
<a href="static/img/screenshot-phone-detail.jpg"
|
||||||
|
><img src="static/img/screenshot-phone-detail.jpg"
|
||||||
|
/></a>
|
||||||
|
<a href="static/img/screenshot-phone-notification.jpg"
|
||||||
|
><img src="static/img/screenshot-phone-notification.jpg"
|
||||||
|
/></a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 id="publish" class="anchor">Publishing messages</h2>
|
<h2 id="publish" class="anchor">Publishing messages</h2>
|
||||||
<p>
|
<p>
|
||||||
<a href="docs/publish/">Publishing messages</a> can be done via PUT or POST. Topics are created on the fly by subscribing or publishing to them.
|
<a href="docs/publish/">Publishing messages</a> can be done via PUT or
|
||||||
Because there is no sign-up, <b>the topic is essentially a password</b>, so pick something that's not easily guessable.
|
POST. Topics are created on the fly by subscribing or publishing to
|
||||||
</p>
|
them. Because there is no sign-up,
|
||||||
<p class="smallMarginBottom">
|
<b>the topic is essentially a password</b>, so pick something that's not
|
||||||
Here's an example showing how to publish a message using a POST request (via <tt>curl -d</tt>):
|
easily guessable.
|
||||||
</p>
|
</p>
|
||||||
<code>
|
<p class="smallMarginBottom">
|
||||||
curl -d "Backup successful 😀" <span class="ntfyUrl">ntfy.sh</span>/mytopic
|
Here's an example showing how to publish a message using a POST request
|
||||||
</code>
|
(via <tt>curl -d</tt>):
|
||||||
<p class="smallMarginBottom">
|
</p>
|
||||||
There are <a href="docs/publish/">more features</a> related to publishing messages: You can set a
|
<code>
|
||||||
<a href="docs/publish/#message-priority">notification priority</a>, a <a href="docs/publish/#message-title">title</a>,
|
curl -d "Backup successful 😀"
|
||||||
and <a href="docs/publish/#tags-emojis">tag messages</a>.
|
<span class="ntfyUrl">ntfy.sh</span>/mytopic
|
||||||
Here's an example using some of them together:
|
</code>
|
||||||
</p>
|
<p class="smallMarginBottom">
|
||||||
<code>
|
There are <a href="docs/publish/">more features</a> related to
|
||||||
curl \<br/>
|
publishing messages: You can set a
|
||||||
-H "Title: Unauthorized access detected" \<br/>
|
<a href="docs/publish/#message-priority">notification priority</a>, a
|
||||||
-H "Priority: urgent" \<br/>
|
<a href="docs/publish/#message-title">title</a>, and
|
||||||
-H "Tags: warning,skull" \<br/>
|
<a href="docs/publish/#tags-emojis">tag messages</a>. Here's an example
|
||||||
-d "Remote access to $(hostname) detected. Act right away." \<br/>
|
using some of them together:
|
||||||
|
</p>
|
||||||
|
<code>
|
||||||
|
curl \<br />
|
||||||
|
-H "Title: Unauthorized access detected" \<br />
|
||||||
|
-H "Priority: urgent" \<br />
|
||||||
|
-H "Tags: warning,skull" \<br />
|
||||||
|
-d "Remote access to $(hostname) detected. Act right away."
|
||||||
|
\<br />
|
||||||
<span class="ntfyUrl">ntfy.sh</span>/mytopic
|
<span class="ntfyUrl">ntfy.sh</span>/mytopic
|
||||||
</code>
|
</code>
|
||||||
<p>
|
<p>
|
||||||
Here's what that looks like in the <a href="docs/subscribe/phone/">Android app</a>:
|
Here's what that looks like in the
|
||||||
</p>
|
<a href="docs/subscribe/phone/">Android app</a>:
|
||||||
<figure>
|
</p>
|
||||||
<img src="static/img/screenshot-phone-popover.png" style="max-height: 200px"/>
|
<figure>
|
||||||
|
<img
|
||||||
|
src="static/img/screenshot-phone-popover.png"
|
||||||
|
style="max-height: 200px"
|
||||||
|
/>
|
||||||
<figcaption>Urgent notification with pop-over</figcaption>
|
<figcaption>Urgent notification with pop-over</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<h2 id="subscribe" class="anchor">Subscribe to a topic</h2>
|
<h2 id="subscribe" class="anchor">Subscribe to a topic</h2>
|
||||||
<p>
|
<p>
|
||||||
You can create and subscribe to a topic either <a href="docs/subscribe/phone/">using your phone</a>,
|
You can create and subscribe to a topic either
|
||||||
in <a href="docs/subscribe/web/">this web UI</a>, or in your own app by <a href="docs/subscribe/api/">subscribing via the API</a>.
|
<a href="docs/subscribe/phone/">using your phone</a>, in
|
||||||
</p>
|
<a href="docs/subscribe/web/">this web UI</a>, or in your own app by
|
||||||
|
<a href="docs/subscribe/api/">subscribing via the API</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="subscribe-phone" class="anchor">Subscribe from your phone</h3>
|
<h3 id="subscribe-phone" class="anchor">Subscribe from your phone</h3>
|
||||||
<p>
|
<p>
|
||||||
Simply get the app and start <a href="docs/publish/">publishing messages</a>. To learn more about the app,
|
Simply get the app and start
|
||||||
<a href="docs/subscribe/phone/">check out the documentation</a>.
|
<a href="docs/publish/">publishing messages</a>. To learn more about the
|
||||||
</p>
|
app, <a href="docs/subscribe/phone/">check out the documentation</a>.
|
||||||
<p>
|
</p>
|
||||||
<a href="https://play.google.com/store/apps/details?id=io.heckel.ntfy"><img src="static/img/badge-googleplay.png"></a>
|
<p>
|
||||||
<a href="https://f-droid.org/en/packages/io.heckel.ntfy/"><img src="static/img/badge-fdroid.png"></a>
|
<a href="https://play.google.com/store/apps/details?id=io.heckel.ntfy"
|
||||||
<a href="https://apps.apple.com/us/app/ntfy/id1625396347"><img src="static/img/badge-appstore.png"></a>
|
><img src="static/img/badge-googleplay.png"
|
||||||
</p>
|
/></a>
|
||||||
<p>
|
<a href="https://f-droid.org/en/packages/io.heckel.ntfy/"
|
||||||
Here's a video showing the app in action:
|
><img src="static/img/badge-fdroid.png"
|
||||||
</p>
|
/></a>
|
||||||
<figure>
|
<a href="https://apps.apple.com/us/app/ntfy/id1625396347"
|
||||||
<video controls muted autoplay loop src="static/img/android-video-overview.mp4" style="max-width: 650px"></video>
|
><img src="static/img/badge-appstore.png"
|
||||||
<figcaption>Sending push notifications to your Android phone</figcaption>
|
/></a>
|
||||||
</figure>
|
</p>
|
||||||
|
<p>Here's a video showing the app in action:</p>
|
||||||
|
<figure>
|
||||||
|
<video
|
||||||
|
controls
|
||||||
|
muted
|
||||||
|
autoplay
|
||||||
|
loop
|
||||||
|
src="static/img/android-video-overview.mp4"
|
||||||
|
style="max-width: 650px"
|
||||||
|
></video>
|
||||||
|
<figcaption>
|
||||||
|
Sending push notifications to your Android phone
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
<h3 id="subscribe-web" class="anchor">Subscribe via web app</h3>
|
<h3 id="subscribe-web" class="anchor">Subscribe via web app</h3>
|
||||||
<p>
|
<p>
|
||||||
Subscribe to topics in the <a href="app">web app</a> and receive messages as <b>desktop notification</b>.
|
Subscribe to topics in the <a href="app">web app</a> and receive
|
||||||
It is available at <b><a href="app"><span class="ntfyUrl">ntfy.sh</span>/app</a></b>.
|
messages as <b>desktop notification</b>. It is available at
|
||||||
</p>
|
<b
|
||||||
<figure>
|
><a href="app"><span class="ntfyUrl">ntfy.sh</span>/app</a></b
|
||||||
<a href="app"><img src="static/img/screenshot-web-detail.png" width="100%"/></a>
|
>.
|
||||||
<figcaption>ntfy web app, available at <a href="app"><span class="ntfyUrl">ntfy.sh</span>/app</a></figcaption>
|
</p>
|
||||||
</figure>
|
<figure>
|
||||||
|
<a href="app"
|
||||||
|
><img src="static/img/screenshot-web-detail.png" width="100%"
|
||||||
|
/></a>
|
||||||
|
<figcaption>
|
||||||
|
ntfy web app, available at
|
||||||
|
<a href="app"><span class="ntfyUrl">ntfy.sh</span>/app</a>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
<h3 id="subscribe-api" class="anchor">Subscribe using the API</h3>
|
<h3 id="subscribe-api" class="anchor">Subscribe using the API</h3>
|
||||||
<p>
|
<p>
|
||||||
There's a super simple API that you can use to integrate your own app. You can consume
|
There's a super simple API that you can use to integrate your own app.
|
||||||
a <a href="docs/subscribe/api/#subscribe-as-json-stream">JSON stream</a>,
|
You can consume a
|
||||||
an <a href="docs/subscribe/api/#subscribe-as-sse-stream">SSE/EventSource stream</a>,
|
<a href="docs/subscribe/api/#subscribe-as-json-stream">JSON stream</a>,
|
||||||
a <a href="docs/subscribe/api/#subscribe-as-raw-stream">plain text stream</a>,
|
an
|
||||||
or <a href="docs/subscribe/api/#websockets">via WebSockets</a>.
|
<a href="docs/subscribe/api/#subscribe-as-sse-stream"
|
||||||
</p>
|
>SSE/EventSource stream</a
|
||||||
<p class="smallMarginBottom">
|
>, a
|
||||||
Here's an example for JSON. The <b>connection stays open</b>, so you can retrieve messages as they come in:
|
<a href="docs/subscribe/api/#subscribe-as-raw-stream"
|
||||||
</p>
|
>plain text stream</a
|
||||||
<code>
|
>, or <a href="docs/subscribe/api/#websockets">via WebSockets</a>.
|
||||||
$ curl -s <span class="ntfyUrl">ntfy.sh</span>/mytopic/json<br/>
|
</p>
|
||||||
{"id":"SLiKI64DOt","time":1635528757,"event":"open","topic":"mytopic"}<br/>
|
<p class="smallMarginBottom">
|
||||||
{"id":"hwQ2YpKdmg","time":1635528741,"event":"message","topic":"mytopic","message":"Hi!"}<br/>
|
Here's an example for JSON. The <b>connection stays open</b>, so you can
|
||||||
{"id":"DGUDShMCsc","time":1635528787,"event":"keepalive","topic":"mytopic"}<br/>
|
retrieve messages as they come in:
|
||||||
|
</p>
|
||||||
|
<code>
|
||||||
|
$ curl -s <span class="ntfyUrl">ntfy.sh</span>/mytopic/json<br />
|
||||||
|
{"id":"SLiKI64DOt","time":1635528757,"event":"open","topic":"mytopic"}<br />
|
||||||
|
{"id":"hwQ2YpKdmg","time":1635528741,"event":"message","topic":"mytopic","message":"Hi!"}<br />
|
||||||
|
{"id":"DGUDShMCsc","time":1635528787,"event":"keepalive","topic":"mytopic"}<br />
|
||||||
...
|
...
|
||||||
</code>
|
</code>
|
||||||
<p>
|
<p>Here's a short video demonstrating it in action:</p>
|
||||||
Here's a short video demonstrating it in action:
|
<figure>
|
||||||
</p>
|
<video
|
||||||
<figure>
|
controls
|
||||||
<video controls muted autoplay loop src="static/img/android-video-subscribe-api.mp4" style="max-width: 650px"></video>
|
muted
|
||||||
<figcaption>Subscribing to the JSON stream with <tt>curl</tt></figcaption>
|
autoplay
|
||||||
</figure>
|
loop
|
||||||
|
src="static/img/android-video-subscribe-api.mp4"
|
||||||
|
style="max-width: 650px"
|
||||||
|
></video>
|
||||||
|
<figcaption>
|
||||||
|
Subscribing to the JSON stream with <tt>curl</tt>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
<h3 id="docs" class="anchor">Check out the docs!</h3>
|
<h3 id="docs" class="anchor">Check out the docs!</h3>
|
||||||
<p>
|
<p>
|
||||||
ntfy has so many more features and you can learn about all of them <a href="docs/">in the documentation</a>
|
ntfy has so many more features and you can learn about all of them
|
||||||
(I tried my very best to make it the best docs ever 😉, not sure if I succeeded, hehe).
|
<a href="docs/">in the documentation</a>
|
||||||
</p>
|
(I tried my very best to make it the best docs ever 😉, not sure if I
|
||||||
<figure>
|
succeeded, hehe).
|
||||||
<a href="docs/"><img width="100%" src="static/img/screenshot-docs.png"/></a>
|
</p>
|
||||||
|
<figure>
|
||||||
|
<a href="docs/"
|
||||||
|
><img width="100%" src="static/img/screenshot-docs.png"
|
||||||
|
/></a>
|
||||||
<figcaption>Check out the documentation</figcaption>
|
<figcaption>Check out the documentation</figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<h3 id="free-software" class="anchor">100% open source & forever free</h3>
|
<h3 id="free-software" class="anchor">
|
||||||
<p>
|
100% open source & forever free
|
||||||
I love free software, and I'm doing this because it's fun. I have no bad intentions, and I will
|
</h3>
|
||||||
never monetize or sell your information. This service will always stay
|
<p>
|
||||||
<a href="https://github.com/binwiederhier/ntfy">free and open</a>.
|
I love free software, and I'm doing this because it's fun. I have no bad
|
||||||
You can read more in the <a href="docs/faq/">FAQs</a> and in the <a href="docs/privacy/">privacy policy</a>.
|
intentions, and I will never monetize or sell your information. This
|
||||||
</p>
|
service will always stay
|
||||||
|
<a href="https://github.com/binwiederhier/ntfy">free and open</a>. You
|
||||||
|
can read more in the <a href="docs/faq/">FAQs</a> and in the
|
||||||
|
<a href="docs/privacy/">privacy policy</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
<center id="ironicCenterTagDontFreakOut"><i>Made with ❤️ by <a href="https://heckel.io">Philipp C. Heckel</a></i></center>
|
<center id="ironicCenterTagDontFreakOut">
|
||||||
</div>
|
<i>Made with ❤️ by <a href="https://heckel.io">Philipp C. Heckel</a></i>
|
||||||
<div id="lightbox" class="lightbox"></div>
|
</center>
|
||||||
<script src="static/js/home.js"></script>
|
</div>
|
||||||
</body>
|
<div id="lightbox" class="lightbox"></div>
|
||||||
|
<script src="static/js/home.js"></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,43 +1,59 @@
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<title>ntfy web</title>
|
<title>ntfy web</title>
|
||||||
|
|
||||||
<!-- Mobile view -->
|
<!-- Mobile view -->
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
|
<meta
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
name="viewport"
|
||||||
<meta name="HandheldFriendly" content="true">
|
content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"
|
||||||
|
/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
|
<meta name="HandheldFriendly" content="true" />
|
||||||
|
|
||||||
<!-- Mobile browsers, background color -->
|
<!-- Mobile browsers, background color -->
|
||||||
<meta name="theme-color" content="#317f6f">
|
<meta name="theme-color" content="#317f6f" />
|
||||||
<meta name="msapplication-navbutton-color" content="#317f6f">
|
<meta name="msapplication-navbutton-color" content="#317f6f" />
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="#317f6f">
|
<meta name="apple-mobile-web-app-status-bar-style" content="#317f6f" />
|
||||||
|
|
||||||
<!-- Favicon, see favicon.io -->
|
<!-- Favicon, see favicon.io -->
|
||||||
<link rel="icon" type="image/png" href="%PUBLIC_URL%/static/img/favicon.png">
|
<link
|
||||||
|
rel="icon"
|
||||||
|
type="image/png"
|
||||||
|
href="%PUBLIC_URL%/static/img/favicon.png"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- Previews in Google, Slack, WhatsApp, etc. -->
|
<!-- Previews in Google, Slack, WhatsApp, etc. -->
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:locale" content="en_US" />
|
<meta property="og:locale" content="en_US" />
|
||||||
<meta property="og:site_name" content="ntfy web" />
|
<meta property="og:site_name" content="ntfy web" />
|
||||||
<meta property="og:title" content="ntfy web" />
|
<meta property="og:title" content="ntfy web" />
|
||||||
<meta property="og:description" content="ntfy lets you send push notifications via scripts from any computer or phone, entirely without signup or cost. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy." />
|
<meta
|
||||||
<meta property="og:image" content="%PUBLIC_URL%/static/img/ntfy.png" />
|
property="og:description"
|
||||||
<meta property="og:url" content="https://ntfy.sh" />
|
content="ntfy lets you send push notifications via scripts from any computer or phone, entirely without signup or cost. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy."
|
||||||
|
/>
|
||||||
|
<meta property="og:image" content="%PUBLIC_URL%/static/img/ntfy.png" />
|
||||||
|
<meta property="og:url" content="https://ntfy.sh" />
|
||||||
|
|
||||||
<!-- Never index -->
|
<!-- Never index -->
|
||||||
<meta name="robots" content="noindex, nofollow" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link rel="stylesheet" href="%PUBLIC_URL%/static/css/fonts.css" type="text/css">
|
<link
|
||||||
</head>
|
rel="stylesheet"
|
||||||
<body>
|
href="%PUBLIC_URL%/static/css/fonts.css"
|
||||||
<noscript>
|
type="text/css"
|
||||||
ntfy web requires JavaScript, but you can also use the <a href="https://ntfy.sh/docs/subscribe/cli/">CLI</a>
|
/>
|
||||||
or <a href="https://ntfy.sh/docs/subscribe/phone/">Android/iOS app</a> to subscribe.
|
</head>
|
||||||
</noscript>
|
<body>
|
||||||
<div id="root"></div>
|
<noscript>
|
||||||
<script src="%PUBLIC_URL%/config.js"></script>
|
ntfy web requires JavaScript, but you can also use the
|
||||||
</body>
|
<a href="https://ntfy.sh/docs/subscribe/cli/">CLI</a> or
|
||||||
|
<a href="https://ntfy.sh/docs/subscribe/phone/">Android/iOS app</a> to
|
||||||
|
subscribe.
|
||||||
|
</noscript>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script src="%PUBLIC_URL%/config.js"></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -2,40 +2,40 @@
|
||||||
|
|
||||||
/* roboto-300 - latin */
|
/* roboto-300 - latin */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Roboto';
|
font-family: "Roboto";
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
src: local(''),
|
src: local(""), url("../fonts/roboto-v29-latin-300.woff2") format("woff2"),
|
||||||
url('../fonts/roboto-v29-latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
|
/* Chrome 26+, Opera 23+, Firefox 39+ */
|
||||||
url('../fonts/roboto-v29-latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
url("../fonts/roboto-v29-latin-300.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* roboto-regular - latin */
|
/* roboto-regular - latin */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Roboto';
|
font-family: "Roboto";
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
src: local(''),
|
src: local(""), url("../fonts/roboto-v29-latin-regular.woff2") format("woff2"),
|
||||||
url('../fonts/roboto-v29-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
|
/* Chrome 26+, Opera 23+, Firefox 39+ */
|
||||||
url('../fonts/roboto-v29-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
url("../fonts/roboto-v29-latin-regular.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* roboto-500 - latin */
|
/* roboto-500 - latin */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Roboto';
|
font-family: "Roboto";
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
src: local(''),
|
src: local(""), url("../fonts/roboto-v29-latin-500.woff2") format("woff2"),
|
||||||
url('../fonts/roboto-v29-latin-500.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
|
/* Chrome 26+, Opera 23+, Firefox 39+ */
|
||||||
url('../fonts/roboto-v29-latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
url("../fonts/roboto-v29-latin-500.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* roboto-700 - latin */
|
/* roboto-700 - latin */
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Roboto';
|
font-family: "Roboto";
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
src: local(''),
|
src: local(""), url("../fonts/roboto-v29-latin-700.woff2") format("woff2"),
|
||||||
url('../fonts/roboto-v29-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
|
/* Chrome 26+, Opera 23+, Firefox 39+ */
|
||||||
url('../fonts/roboto-v29-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
url("../fonts/roboto-v29-latin-700.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,280 +1,283 @@
|
||||||
/* general styling */
|
/* general styling */
|
||||||
|
|
||||||
html, body {
|
html,
|
||||||
font-family: 'Roboto', sans-serif;
|
body {
|
||||||
font-weight: 400;
|
font-family: "Roboto", sans-serif;
|
||||||
font-size: 1.1em;
|
font-weight: 400;
|
||||||
color: #444;
|
font-size: 1.1em;
|
||||||
margin: 0;
|
color: #444;
|
||||||
padding: 0;
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
/* prevent scrollbar from repositioning website:
|
/* prevent scrollbar from repositioning website:
|
||||||
* https://www.w3docs.com/snippets/css/how-to-prevent-scrollbar-from-repositioning-web-page.html */
|
* https://www.w3docs.com/snippets/css/how-to-prevent-scrollbar-from-repositioning-web-page.html */
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
a, a:visited {
|
a,
|
||||||
color: #338574;
|
a:visited {
|
||||||
|
color: #338574;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #317f6f;
|
color: #317f6f;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
margin-top: 35px;
|
margin-top: 35px;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
font-size: 2.5em;
|
font-size: 2.5em;
|
||||||
word-wrap: break-word; /* For very long topics */
|
word-wrap: break-word; /* For very long topics */
|
||||||
padding-right: 40px; /* For the X on the detail page */
|
padding-right: 40px; /* For the X on the detail page */
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
font-size: 1.8em;
|
font-size: 1.8em;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
margin-top: 25px;
|
margin-top: 25px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
line-height: 160%;
|
line-height: 160%;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.smallMarginBottom {
|
p.smallMarginBottom {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
b {
|
b {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
tt {
|
tt {
|
||||||
background: #eee;
|
background: #eee;
|
||||||
padding: 2px 7px;
|
padding: 2px 7px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
code {
|
code {
|
||||||
display: block;
|
display: block;
|
||||||
background: #eee;
|
background: #eee;
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Main page */
|
/* Main page */
|
||||||
|
|
||||||
#main {
|
#main {
|
||||||
max-width: 900px;
|
max-width: 900px;
|
||||||
margin: 0 auto 50px auto;
|
margin: 0 auto 50px auto;
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#error {
|
#error {
|
||||||
color: darkred;
|
color: darkred;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ironicCenterTagDontFreakOut {
|
#ironicCenterTagDontFreakOut {
|
||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Anchors */
|
/* Anchors */
|
||||||
|
|
||||||
.anchor .anchorLink {
|
.anchor .anchorLink {
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.anchor:hover .anchorLink {
|
.anchor:hover .anchorLink {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
.anchor .anchorLink:hover {
|
.anchor .anchorLink:hover {
|
||||||
color: #338574;
|
color: #338574;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Figures */
|
/* Figures */
|
||||||
|
|
||||||
figure {
|
figure {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
figure img, figure video {
|
figure img,
|
||||||
filter: drop-shadow(3px 3px 3px #ccc);
|
figure video {
|
||||||
border-radius: 7px;
|
filter: drop-shadow(3px 3px 3px #ccc);
|
||||||
max-width: 100%;
|
border-radius: 7px;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
figure video {
|
figure video {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-height: 450px;
|
max-height: 450px;
|
||||||
}
|
}
|
||||||
|
|
||||||
figcaption {
|
figcaption {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Screenshots */
|
/* Screenshots */
|
||||||
|
|
||||||
#screenshots {
|
#screenshots {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#screenshots img {
|
#screenshots img {
|
||||||
height: 190px;
|
height: 190px;
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
filter: drop-shadow(2px 2px 2px #ddd);
|
filter: drop-shadow(2px 2px 2px #ddd);
|
||||||
}
|
}
|
||||||
|
|
||||||
#screenshots .nowrap {
|
#screenshots .nowrap {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lightbox; thanks to https://yossiabramov.com/blog/vanilla-js-lightbox */
|
/* Lightbox; thanks to https://yossiabramov.com/blog/vanilla-js-lightbox */
|
||||||
|
|
||||||
.lightbox {
|
.lightbox {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left:0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: all 0.15s ease-in;
|
transition: all 0.15s ease-in;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox.show {
|
.lightbox.show {
|
||||||
background-color: rgba(0,0,0, 0.75);
|
background-color: rgba(0, 0, 0, 0.75);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox img {
|
.lightbox img {
|
||||||
max-width: 90%;
|
max-width: 90%;
|
||||||
max-height: 90%;
|
max-height: 90%;
|
||||||
filter: drop-shadow(5px 5px 10px #222);
|
filter: drop-shadow(5px 5px 10px #222);
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox {
|
.lightbox .close-lightbox {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 30px;
|
top: 30px;
|
||||||
right: 30px;
|
right: 30px;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox::after,
|
.lightbox .close-lightbox::after,
|
||||||
.lightbox .close-lightbox::before {
|
.lightbox .close-lightbox::before {
|
||||||
content: '';
|
content: "";
|
||||||
width: 3px;
|
width: 3px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
background-color: #ddd;
|
background-color: #ddd;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox::before {
|
.lightbox .close-lightbox::before {
|
||||||
transform: rotate(-45deg);
|
transform: rotate(-45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox .close-lightbox:hover::after,
|
.lightbox .close-lightbox:hover::after,
|
||||||
.lightbox .close-lightbox:hover::before {
|
.lightbox .close-lightbox:hover::before {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header */
|
/* Header */
|
||||||
|
|
||||||
#header {
|
#header {
|
||||||
background: #338574;
|
background: #338574;
|
||||||
height: 130px;
|
height: 130px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header #headerBox {
|
#header #headerBox {
|
||||||
max-width: 900px;
|
max-width: 900px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header #logo {
|
#header #logo {
|
||||||
margin-top: 23px;
|
margin-top: 23px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header #name {
|
#header #name {
|
||||||
float: left;
|
float: left;
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 2.6em;
|
font-size: 2.6em;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
margin: 35px 0 0 20px;
|
margin: 35px 0 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header ol {
|
#header ol {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: 80px;
|
margin-top: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header ol li {
|
#header ol li {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0 10px;
|
margin: 0 10px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header ol li a, nav ol li a:visited {
|
#header ol li a,
|
||||||
color: white;
|
nav ol li a:visited {
|
||||||
text-decoration: none;
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#header ol li a:hover {
|
#header ol li a:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
padding: 4px 0;
|
padding: 4px 0;
|
||||||
margin: 4px 0;
|
margin: 4px 0;
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Hide top menu SMALL SCREEN */
|
/* Hide top menu SMALL SCREEN */
|
||||||
@media only screen and (max-width: 780px) {
|
@media only screen and (max-width: 780px) {
|
||||||
#header ol {
|
#header ol {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,84 +1,88 @@
|
||||||
|
|
||||||
/* All the things */
|
/* All the things */
|
||||||
|
|
||||||
let currentUrl = window.location.hostname;
|
let currentUrl = window.location.hostname;
|
||||||
if (window.location.port) {
|
if (window.location.port) {
|
||||||
currentUrl += ':' + window.location.port
|
currentUrl += ":" + window.location.port;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Screenshots */
|
/* Screenshots */
|
||||||
const lightbox = document.getElementById("lightbox");
|
const lightbox = document.getElementById("lightbox");
|
||||||
|
|
||||||
const showScreenshotOverlay = (e, el, index) => {
|
const showScreenshotOverlay = (e, el, index) => {
|
||||||
lightbox.classList.add('show');
|
lightbox.classList.add("show");
|
||||||
document.addEventListener('keydown', nextScreenshotKeyboardListener);
|
document.addEventListener("keydown", nextScreenshotKeyboardListener);
|
||||||
return showScreenshot(e, index);
|
return showScreenshot(e, index);
|
||||||
};
|
};
|
||||||
|
|
||||||
const showScreenshot = (e, index) => {
|
const showScreenshot = (e, index) => {
|
||||||
const actualIndex = resolveScreenshotIndex(index);
|
const actualIndex = resolveScreenshotIndex(index);
|
||||||
lightbox.innerHTML = '<div class="close-lightbox"></div>' + screenshots[actualIndex].innerHTML;
|
lightbox.innerHTML =
|
||||||
lightbox.querySelector('img').onclick = (e) => { return showScreenshot(e,actualIndex+1); };
|
'<div class="close-lightbox"></div>' + screenshots[actualIndex].innerHTML;
|
||||||
currentScreenshotIndex = actualIndex;
|
lightbox.querySelector("img").onclick = (e) => {
|
||||||
e.stopPropagation();
|
return showScreenshot(e, actualIndex + 1);
|
||||||
return false;
|
};
|
||||||
|
currentScreenshotIndex = actualIndex;
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const nextScreenshot = (e) => {
|
const nextScreenshot = (e) => {
|
||||||
return showScreenshot(e, currentScreenshotIndex+1);
|
return showScreenshot(e, currentScreenshotIndex + 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const previousScreenshot = (e) => {
|
const previousScreenshot = (e) => {
|
||||||
return showScreenshot(e, currentScreenshotIndex-1);
|
return showScreenshot(e, currentScreenshotIndex - 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
const resolveScreenshotIndex = (index) => {
|
const resolveScreenshotIndex = (index) => {
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
return screenshots.length - 1;
|
return screenshots.length - 1;
|
||||||
} else if (index > screenshots.length - 1) {
|
} else if (index > screenshots.length - 1) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return index;
|
return index;
|
||||||
};
|
};
|
||||||
|
|
||||||
const hideScreenshotOverlay = (e) => {
|
const hideScreenshotOverlay = (e) => {
|
||||||
lightbox.classList.remove('show');
|
lightbox.classList.remove("show");
|
||||||
document.removeEventListener('keydown', nextScreenshotKeyboardListener);
|
document.removeEventListener("keydown", nextScreenshotKeyboardListener);
|
||||||
};
|
};
|
||||||
|
|
||||||
const nextScreenshotKeyboardListener = (e) => {
|
const nextScreenshotKeyboardListener = (e) => {
|
||||||
switch (e.keyCode) {
|
switch (e.keyCode) {
|
||||||
case 37:
|
case 37:
|
||||||
previousScreenshot(e);
|
previousScreenshot(e);
|
||||||
break;
|
break;
|
||||||
case 39:
|
case 39:
|
||||||
nextScreenshot(e);
|
nextScreenshot(e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let currentScreenshotIndex = 0;
|
let currentScreenshotIndex = 0;
|
||||||
const screenshots = [...document.querySelectorAll("#screenshots a")];
|
const screenshots = [...document.querySelectorAll("#screenshots a")];
|
||||||
screenshots.forEach((el, index) => {
|
screenshots.forEach((el, index) => {
|
||||||
el.onclick = (e) => { return showScreenshotOverlay(e, el, index); };
|
el.onclick = (e) => {
|
||||||
|
return showScreenshotOverlay(e, el, index);
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
lightbox.onclick = hideScreenshotOverlay;
|
lightbox.onclick = hideScreenshotOverlay;
|
||||||
|
|
||||||
// Add anchor links
|
// Add anchor links
|
||||||
document.querySelectorAll('.anchor').forEach((el) => {
|
document.querySelectorAll(".anchor").forEach((el) => {
|
||||||
if (el.hasAttribute('id')) {
|
if (el.hasAttribute("id")) {
|
||||||
const id = el.getAttribute('id');
|
const id = el.getAttribute("id");
|
||||||
const anchor = document.createElement('a');
|
const anchor = document.createElement("a");
|
||||||
anchor.innerHTML = `<a href="#${id}" class="anchorLink">#</a>`;
|
anchor.innerHTML = `<a href="#${id}" class="anchorLink">#</a>`;
|
||||||
el.appendChild(anchor);
|
el.appendChild(anchor);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Change ntfy.sh url and protocol to match self-hosted one
|
// Change ntfy.sh url and protocol to match self-hosted one
|
||||||
document.querySelectorAll('.ntfyUrl').forEach((el) => {
|
document.querySelectorAll(".ntfyUrl").forEach((el) => {
|
||||||
el.innerHTML = currentUrl;
|
el.innerHTML = currentUrl;
|
||||||
});
|
});
|
||||||
document.querySelectorAll('.ntfyProtocol').forEach((el) => {
|
document.querySelectorAll(".ntfyProtocol").forEach((el) => {
|
||||||
el.innerHTML = window.location.protocol + "//";
|
el.innerHTML = window.location.protocol + "//";
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_clear_notifications": "Премахване на известия",
|
"action_bar_clear_notifications": "Премахване на известия",
|
||||||
"alert_grant_description": "Разрешете на мрежовия четец да показва известия.",
|
"alert_grant_description": "Разрешете на мрежовия четец да показва известия.",
|
||||||
"notifications_attachment_copy_url_title": "Копиране на адреса на прикачения файл",
|
"notifications_attachment_copy_url_title": "Копиране на адреса на прикачения файл",
|
||||||
"notifications_example": "Пример",
|
"notifications_example": "Пример",
|
||||||
"notifications_no_subscriptions_title": "Липсват абонаменти",
|
"notifications_no_subscriptions_title": "Липсват абонаменти",
|
||||||
"nav_topics_title": "Абонаменти",
|
"nav_topics_title": "Абонаменти",
|
||||||
"action_bar_send_test_notification": "Пробно известие",
|
"action_bar_send_test_notification": "Пробно известие",
|
||||||
"action_bar_unsubscribe": "Отписване",
|
"action_bar_unsubscribe": "Отписване",
|
||||||
"nav_button_all_notifications": "Всички известия",
|
"nav_button_all_notifications": "Всички известия",
|
||||||
"action_bar_settings": "Настройки",
|
"action_bar_settings": "Настройки",
|
||||||
"publish_dialog_title_topic": "Публикуване в темата {{topic}}",
|
"publish_dialog_title_topic": "Публикуване в темата {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Изпращане",
|
"publish_dialog_title_no_topic": "Изпращане",
|
||||||
"publish_dialog_progress_uploading": "Изпращане…",
|
"publish_dialog_progress_uploading": "Изпращане…",
|
||||||
"publish_dialog_progress_uploading_detail": "Изпращане {{loaded}}/{{total}} ({{percent}}%)…",
|
"publish_dialog_progress_uploading_detail": "Изпращане {{loaded}}/{{total}} ({{percent}}%)…",
|
||||||
"publish_dialog_message_published": "Известието е публикувано",
|
"publish_dialog_message_published": "Известието е публикувано",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "надвишава ограничението от {{fileSizeLimit}} за размер на файл и квотата, остават {{remainingBytes}}",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "надвишава ограничението от {{fileSizeLimit}} за размер на файл и квотата, остават {{remainingBytes}}",
|
||||||
"publish_dialog_message_label": "Съобщение",
|
"publish_dialog_message_label": "Съобщение",
|
||||||
"publish_dialog_message_placeholder": "Въведете съобщение",
|
"publish_dialog_message_placeholder": "Въведете съобщение",
|
||||||
"publish_dialog_other_features": "Други възможности:",
|
"publish_dialog_other_features": "Други възможности:",
|
||||||
"publish_dialog_chip_click_label": "Адрес",
|
"publish_dialog_chip_click_label": "Адрес",
|
||||||
"publish_dialog_chip_email_label": "Препращане към ел. поща",
|
"publish_dialog_chip_email_label": "Препращане към ел. поща",
|
||||||
"publish_dialog_chip_attach_url_label": "Прикачване на файл от адрес",
|
"publish_dialog_chip_attach_url_label": "Прикачване на файл от адрес",
|
||||||
"publish_dialog_chip_attach_file_label": "Прикачване местен файл",
|
"publish_dialog_chip_attach_file_label": "Прикачване местен файл",
|
||||||
"publish_dialog_chip_delay_label": "Забавяне на изпращането",
|
"publish_dialog_chip_delay_label": "Забавяне на изпращането",
|
||||||
"publish_dialog_chip_topic_label": "Промяна на темата",
|
"publish_dialog_chip_topic_label": "Промяна на темата",
|
||||||
"publish_dialog_button_cancel_sending": "Отменяне на изпращането",
|
"publish_dialog_button_cancel_sending": "Отменяне на изпращането",
|
||||||
"publish_dialog_button_cancel": "Отказ",
|
"publish_dialog_button_cancel": "Отказ",
|
||||||
"subscribe_dialog_error_user_anonymous": "анонимен",
|
"subscribe_dialog_error_user_anonymous": "анонимен",
|
||||||
"prefs_notifications_title": "Известия",
|
"prefs_notifications_title": "Известия",
|
||||||
"prefs_notifications_sound_title": "Звук при получаване",
|
"prefs_notifications_sound_title": "Звук при получаване",
|
||||||
"prefs_notifications_sound_no_sound": "Без звук",
|
"prefs_notifications_sound_no_sound": "Без звук",
|
||||||
"prefs_notifications_min_priority_title": "Най-нисък приоритет",
|
"prefs_notifications_min_priority_title": "Най-нисък приоритет",
|
||||||
"prefs_notifications_min_priority_any": "Всички",
|
"prefs_notifications_min_priority_any": "Всички",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Нисък приоритет и по-висок",
|
"prefs_notifications_min_priority_low_and_higher": "Нисък приоритет и по-висок",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Подразбиран приоритет и по-висок",
|
"prefs_notifications_min_priority_default_and_higher": "Подразбиран приоритет и по-висок",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Висок приоритет и по-висок",
|
"prefs_notifications_min_priority_high_and_higher": "Висок приоритет и по-висок",
|
||||||
"prefs_notifications_min_priority_max_only": "Само най-висок приоритет",
|
"prefs_notifications_min_priority_max_only": "Само най-висок приоритет",
|
||||||
"prefs_notifications_delete_after_never": "Никога",
|
"prefs_notifications_delete_after_never": "Никога",
|
||||||
"prefs_users_add_button": "Добавяне",
|
"prefs_users_add_button": "Добавяне",
|
||||||
"prefs_users_dialog_password_label": "Парола",
|
"prefs_users_dialog_password_label": "Парола",
|
||||||
"alert_not_supported_description": "Мрежовият четец не поддържа известия.",
|
"alert_not_supported_description": "Мрежовият четец не поддържа известия.",
|
||||||
"message_bar_type_message": "Въведете съобщение",
|
"message_bar_type_message": "Въведете съобщение",
|
||||||
"message_bar_error_publishing": "Грешка при изпращане на известието",
|
"message_bar_error_publishing": "Грешка при изпращане на известието",
|
||||||
"notifications_copied_to_clipboard": "Копирано в междинната памет",
|
"notifications_copied_to_clipboard": "Копирано в междинната памет",
|
||||||
"notifications_attachment_link_expired": "препратката за изтегляне е с изтекла давност",
|
"notifications_attachment_link_expired": "препратката за изтегляне е с изтекла давност",
|
||||||
"nav_button_settings": "Настройки",
|
"nav_button_settings": "Настройки",
|
||||||
"nav_button_documentation": "Ръководство",
|
"nav_button_documentation": "Ръководство",
|
||||||
"nav_button_subscribe": "Абониране за тема",
|
"nav_button_subscribe": "Абониране за тема",
|
||||||
"alert_grant_title": "Известията са изключени",
|
"alert_grant_title": "Известията са изключени",
|
||||||
"alert_grant_button": "Разрешаване",
|
"alert_grant_button": "Разрешаване",
|
||||||
"notifications_tags": "Етикети",
|
"notifications_tags": "Етикети",
|
||||||
"nav_button_publish_message": "Изпращане",
|
"nav_button_publish_message": "Изпращане",
|
||||||
"alert_not_supported_title": "Не се поддържат известия",
|
"alert_not_supported_title": "Не се поддържат известия",
|
||||||
"notifications_attachment_open_title": "Към {{url}}",
|
"notifications_attachment_open_title": "Към {{url}}",
|
||||||
"notifications_attachment_copy_url_button": "Копиране на адреса",
|
"notifications_attachment_copy_url_button": "Копиране на адреса",
|
||||||
"notifications_attachment_open_button": "Отваряне на прикачения файл",
|
"notifications_attachment_open_button": "Отваряне на прикачения файл",
|
||||||
"notifications_attachment_link_expires": "препратката изтича на {{date}}",
|
"notifications_attachment_link_expires": "препратката изтича на {{date}}",
|
||||||
"notifications_actions_open_url_title": "Към {{url}}",
|
"notifications_actions_open_url_title": "Към {{url}}",
|
||||||
"notifications_click_copy_url_button": "Копиране на препратка",
|
"notifications_click_copy_url_button": "Копиране на препратка",
|
||||||
"notifications_click_open_button": "Отваряне",
|
"notifications_click_open_button": "Отваряне",
|
||||||
"notifications_click_copy_url_title": "Копиране на препратката в междинната памет",
|
"notifications_click_copy_url_title": "Копиране на препратката в междинната памет",
|
||||||
"notifications_none_for_topic_title": "Липсват известия в темата",
|
"notifications_none_for_topic_title": "Липсват известия в темата",
|
||||||
"notifications_none_for_any_title": "Липсват известия",
|
"notifications_none_for_any_title": "Липсват известия",
|
||||||
"notifications_none_for_topic_description": "За да изпратите известия в тази тема направете заявка чрез методите PUT или POST към адреса й.",
|
"notifications_none_for_topic_description": "За да изпратите известия в тази тема направете заявка чрез методите PUT или POST към адреса й.",
|
||||||
"notifications_none_for_any_description": "За да изпратите известия в тема направете заявка чрез методите PUT или POST към адреса ѝ. Ето пример с една от вашите теми.",
|
"notifications_none_for_any_description": "За да изпратите известия в тема направете заявка чрез методите PUT или POST към адреса ѝ. Ето пример с една от вашите теми.",
|
||||||
"notifications_no_subscriptions_description": "Щракнете върху „{{linktext}}“, за да създадете тема или да се абонирате. След това като направите заявка чрез методите PUT или POST ще ги получите тук.",
|
"notifications_no_subscriptions_description": "Щракнете върху „{{linktext}}“, за да създадете тема или да се абонирате. След това като направите заявка чрез методите PUT или POST ще ги получите тук.",
|
||||||
"notifications_more_details": "За допълнителна информация посетете <websiteLink>страницата</websiteLink> или <docsLink>документацията</docsLink>.",
|
"notifications_more_details": "За допълнителна информация посетете <websiteLink>страницата</websiteLink> или <docsLink>документацията</docsLink>.",
|
||||||
"publish_dialog_priority_min": "Най-нисък приоритет",
|
"publish_dialog_priority_min": "Най-нисък приоритет",
|
||||||
"publish_dialog_attachment_limits_file_reached": "надвишава ограничението от {{fileSizeLimit}} за размер на файл",
|
"publish_dialog_attachment_limits_file_reached": "надвишава ограничението от {{fileSizeLimit}} за размер на файл",
|
||||||
"publish_dialog_base_url_label": "Адрес на услугата",
|
"publish_dialog_base_url_label": "Адрес на услугата",
|
||||||
"publish_dialog_base_url_placeholder": "Адрес на услугата, напр. https://example.com",
|
"publish_dialog_base_url_placeholder": "Адрес на услугата, напр. https://example.com",
|
||||||
"publish_dialog_topic_placeholder": "Име на темата, напр. phils_alerts",
|
"publish_dialog_topic_placeholder": "Име на темата, напр. phils_alerts",
|
||||||
"publish_dialog_priority_low": "Нисък приоритет",
|
"publish_dialog_priority_low": "Нисък приоритет",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "надвишава квотата, остават {{remainingBytes}}",
|
"publish_dialog_attachment_limits_quota_reached": "надвишава квотата, остават {{remainingBytes}}",
|
||||||
"publish_dialog_priority_high": "Висок приоритет",
|
"publish_dialog_priority_high": "Висок приоритет",
|
||||||
"publish_dialog_priority_default": "Подразбиран приоритет",
|
"publish_dialog_priority_default": "Подразбиран приоритет",
|
||||||
"publish_dialog_title_placeholder": "Заглавие на известието, напр. Предупреждение за диска",
|
"publish_dialog_title_placeholder": "Заглавие на известието, напр. Предупреждение за диска",
|
||||||
"publish_dialog_tags_label": "Етикети",
|
"publish_dialog_tags_label": "Етикети",
|
||||||
"publish_dialog_email_label": "Адрес на електронна поща",
|
"publish_dialog_email_label": "Адрес на електронна поща",
|
||||||
"publish_dialog_priority_max": "Най-висок приоритет",
|
"publish_dialog_priority_max": "Най-висок приоритет",
|
||||||
"publish_dialog_tags_placeholder": "Разделени със запетая етикети, напр. warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "Разделени със запетая етикети, напр. warning, srv1-backup",
|
||||||
"publish_dialog_click_label": "Адрес",
|
"publish_dialog_click_label": "Адрес",
|
||||||
"publish_dialog_topic_label": "Име на темата",
|
"publish_dialog_topic_label": "Име на темата",
|
||||||
"publish_dialog_title_label": "Заглавие",
|
"publish_dialog_title_label": "Заглавие",
|
||||||
"publish_dialog_priority_label": "Приоритет",
|
"publish_dialog_priority_label": "Приоритет",
|
||||||
"publish_dialog_click_placeholder": "Адрес, който се отваря при щракване върху известието",
|
"publish_dialog_click_placeholder": "Адрес, който се отваря при щракване върху известието",
|
||||||
"publish_dialog_email_placeholder": "Поща, на която да се препрати известието, напр. phil@example.com",
|
"publish_dialog_email_placeholder": "Поща, на която да се препрати известието, напр. phil@example.com",
|
||||||
"publish_dialog_attach_label": "Адрес на прикачения файл",
|
"publish_dialog_attach_label": "Адрес на прикачения файл",
|
||||||
"publish_dialog_filename_placeholder": "Име на прикачения файл",
|
"publish_dialog_filename_placeholder": "Име на прикачения файл",
|
||||||
"publish_dialog_attach_placeholder": "Прикачете файл от адрес, напр. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Прикачете файл от адрес, напр. https://f-droid.org/F-Droid.apk",
|
||||||
"prefs_notifications_delete_after_three_hours": "След три часа",
|
"prefs_notifications_delete_after_three_hours": "След три часа",
|
||||||
"publish_dialog_filename_label": "Име на файла",
|
"publish_dialog_filename_label": "Име на файла",
|
||||||
"publish_dialog_delay_label": "Забавяне",
|
"publish_dialog_delay_label": "Забавяне",
|
||||||
"publish_dialog_details_examples_description": "За примери и подробно описание на всички възможности при изпращане, вижте <docsLink>документацията</docsLink>.",
|
"publish_dialog_details_examples_description": "За примери и подробно описание на всички възможности при изпращане, вижте <docsLink>документацията</docsLink>.",
|
||||||
"publish_dialog_button_send": "Изпращане",
|
"publish_dialog_button_send": "Изпращане",
|
||||||
"publish_dialog_checkbox_publish_another": "Изпращане на повече",
|
"publish_dialog_checkbox_publish_another": "Изпращане на повече",
|
||||||
"publish_dialog_attached_file_title": "Прикачен файл:",
|
"publish_dialog_attached_file_title": "Прикачен файл:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Име на прикачения файл",
|
"publish_dialog_attached_file_filename_placeholder": "Име на прикачения файл",
|
||||||
"publish_dialog_drop_file_here": "Пуснете файла тук",
|
"publish_dialog_drop_file_here": "Пуснете файла тук",
|
||||||
"subscribe_dialog_subscribe_description": "Възможно е темите да не са защитени с парола, затова изберете име, което е трудно за отгатване. След като се абонирате, можете да изпращате известия чрез методите PUT или POST.",
|
"subscribe_dialog_subscribe_description": "Възможно е темите да не са защитени с парола, затова изберете име, което е трудно за отгатване. След като се абонирате, можете да изпращате известия чрез методите PUT или POST.",
|
||||||
"emoji_picker_search_placeholder": "Търсете емоция",
|
"emoji_picker_search_placeholder": "Търсете емоция",
|
||||||
"subscribe_dialog_subscribe_title": "Абониране за тема",
|
"subscribe_dialog_subscribe_title": "Абониране за тема",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Име на темата, напр. phils_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Име на темата, напр. phils_alerts",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Използване на друг сървър",
|
"subscribe_dialog_subscribe_use_another_label": "Използване на друг сървър",
|
||||||
"subscribe_dialog_login_username_label": "Потребител, напр. phil",
|
"subscribe_dialog_login_username_label": "Потребител, напр. phil",
|
||||||
"subscribe_dialog_login_button_back": "Назад",
|
"subscribe_dialog_login_button_back": "Назад",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Отказ",
|
"subscribe_dialog_subscribe_button_cancel": "Отказ",
|
||||||
"subscribe_dialog_login_description": "Темата е защитена. За да се абонирате въведете потребител и парола.",
|
"subscribe_dialog_login_description": "Темата е защитена. За да се абонирате въведете потребител и парола.",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Абониране",
|
"subscribe_dialog_subscribe_button_subscribe": "Абониране",
|
||||||
"subscribe_dialog_login_title": "Изисква се вход",
|
"subscribe_dialog_login_title": "Изисква се вход",
|
||||||
"prefs_notifications_delete_after_title": "Автоматично премахване",
|
"prefs_notifications_delete_after_title": "Автоматично премахване",
|
||||||
"prefs_notifications_delete_after_one_day": "След един ден",
|
"prefs_notifications_delete_after_one_day": "След един ден",
|
||||||
"prefs_users_table_user_header": "Потребител",
|
"prefs_users_table_user_header": "Потребител",
|
||||||
"prefs_users_dialog_title_edit": "Промяна на потребител",
|
"prefs_users_dialog_title_edit": "Промяна на потребител",
|
||||||
"prefs_users_dialog_base_url_label": "Адрес на услугата, e.g. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "Адрес на услугата, e.g. https://ntfy.sh",
|
||||||
"prefs_users_dialog_button_cancel": "Отказ",
|
"prefs_users_dialog_button_cancel": "Отказ",
|
||||||
"prefs_users_dialog_button_save": "Запазване",
|
"prefs_users_dialog_button_save": "Запазване",
|
||||||
"prefs_appearance_language_title": "Език",
|
"prefs_appearance_language_title": "Език",
|
||||||
"subscribe_dialog_login_password_label": "Парола",
|
"subscribe_dialog_login_password_label": "Парола",
|
||||||
"subscribe_dialog_login_button_login": "Вход",
|
"subscribe_dialog_login_button_login": "Вход",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Потребителят {{username}} няма достъп",
|
"subscribe_dialog_error_user_not_authorized": "Потребителят {{username}} няма достъп",
|
||||||
"prefs_appearance_title": "Външен вид",
|
"prefs_appearance_title": "Външен вид",
|
||||||
"publish_dialog_delay_placeholder": "Забавяне на изпращането, {{unixTimestamp}}, {{relativeTime}} или „{{naturalLanguage}}“ (на английски)",
|
"publish_dialog_delay_placeholder": "Забавяне на изпращането, {{unixTimestamp}}, {{relativeTime}} или „{{naturalLanguage}}“ (на английски)",
|
||||||
"prefs_notifications_delete_after_one_week": "След една седмица",
|
"prefs_notifications_delete_after_one_week": "След една седмица",
|
||||||
"prefs_users_title": "Управление на потребители",
|
"prefs_users_title": "Управление на потребители",
|
||||||
"prefs_users_table_base_url_header": "Адрес на услугата",
|
"prefs_users_table_base_url_header": "Адрес на услугата",
|
||||||
"prefs_users_dialog_title_add": "Добавяне на потребител",
|
"prefs_users_dialog_title_add": "Добавяне на потребител",
|
||||||
"prefs_notifications_delete_after_one_month": "След един месец",
|
"prefs_notifications_delete_after_one_month": "След един месец",
|
||||||
"prefs_users_dialog_username_label": "Потребител, напр. phil",
|
"prefs_users_dialog_username_label": "Потребител, напр. phil",
|
||||||
"prefs_users_dialog_button_add": "Добавяне",
|
"prefs_users_dialog_button_add": "Добавяне",
|
||||||
"error_boundary_title": "О, не, ntfy се срина",
|
"error_boundary_title": "О, не, ntfy се срина",
|
||||||
"error_boundary_description": "Това очевидно не трябва да се случва. Много съжаляваме!<br/>Ако имате минута, <githubLink>докладвайте в GitHub</githubLink> или ни уведомете в <discordLink>Discord</discordLink> или <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Това очевидно не трябва да се случва. Много съжаляваме!<br/>Ако имате минута, <githubLink>докладвайте в GitHub</githubLink> или ни уведомете в <discordLink>Discord</discordLink> или <matrixLink>Matrix</matrixLink>.",
|
||||||
"error_boundary_stack_trace": "Следа от стека",
|
"error_boundary_stack_trace": "Следа от стека",
|
||||||
"error_boundary_gathering_info": "Събиране на допълнителна информация…",
|
"error_boundary_gathering_info": "Събиране на допълнителна информация…",
|
||||||
"notifications_loading": "Зареждане на известия…",
|
"notifications_loading": "Зареждане на известия…",
|
||||||
"error_boundary_button_copy_stack_trace": "Копиране на следата от стека",
|
"error_boundary_button_copy_stack_trace": "Копиране на следата от стека",
|
||||||
"prefs_users_description": "Добавяйте и премахвайте потребители за защитените теми. Имайте предвид, че потребителското име и паролата се съхраняват в местната памет на мрежовия четец.",
|
"prefs_users_description": "Добавяйте и премахвайте потребители за защитените теми. Имайте предвид, че потребителското име и паролата се съхраняват в местната памет на мрежовия четец.",
|
||||||
"prefs_notifications_sound_description_none": "Известията не са съпроводени със звук",
|
"prefs_notifications_sound_description_none": "Известията не са съпроводени със звук",
|
||||||
"prefs_notifications_sound_description_some": "При пристигане известията са съпроводени от звука „{{sound}}“",
|
"prefs_notifications_sound_description_some": "При пристигане известията са съпроводени от звука „{{sound}}“",
|
||||||
"prefs_notifications_delete_after_never_description": "Известията никога не се премахват автоматично",
|
"prefs_notifications_delete_after_never_description": "Известията никога не се премахват автоматично",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Известията се премахват автоматично след три часа",
|
"prefs_notifications_delete_after_three_hours_description": "Известията се премахват автоматично след три часа",
|
||||||
"priority_min": "най-нисък",
|
"priority_min": "най-нисък",
|
||||||
"priority_low": "нисък",
|
"priority_low": "нисък",
|
||||||
"priority_high": "висок",
|
"priority_high": "висок",
|
||||||
"priority_max": "най-висок",
|
"priority_max": "най-висок",
|
||||||
"priority_default": "подразбиран",
|
"priority_default": "подразбиран",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Известията се премахват автоматично след една седмица",
|
"prefs_notifications_delete_after_one_week_description": "Известията се премахват автоматично след една седмица",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Известията се премахват автоматично след един ден",
|
"prefs_notifications_delete_after_one_day_description": "Известията се премахват автоматично след един ден",
|
||||||
"prefs_notifications_min_priority_description_max": "Показват се известията с приоритет 5 (най-висок)",
|
"prefs_notifications_min_priority_description_max": "Показват се известията с приоритет 5 (най-висок)",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Известията се премахват автоматично след един месец",
|
"prefs_notifications_delete_after_one_month_description": "Известията се премахват автоматично след един месец",
|
||||||
"prefs_notifications_min_priority_description_any": "Показват се всички известия, независимо от приоритета",
|
"prefs_notifications_min_priority_description_any": "Показват се всички известия, независимо от приоритета",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Показват се известията с приоритет {{number}} ({{name}}) или по-висок",
|
"prefs_notifications_min_priority_description_x_or_higher": "Показват се известията с приоритет {{number}} ({{name}}) или по-висок",
|
||||||
"notifications_actions_http_request_title": "Изпращане на HTTP {{method}} до {{url}}",
|
"notifications_actions_http_request_title": "Изпращане на HTTP {{method}} до {{url}}",
|
||||||
"notifications_actions_not_supported": "Действието не се поддържа от приложението за интернет",
|
"notifications_actions_not_supported": "Действието не се поддържа от приложението за интернет",
|
||||||
"action_bar_show_menu": "Показване на менюто",
|
"action_bar_show_menu": "Показване на менюто",
|
||||||
"action_bar_logo_alt": "Логотип на ntfy",
|
"action_bar_logo_alt": "Логотип на ntfy",
|
||||||
"action_bar_toggle_mute": "Заглушаване или пускне на известията",
|
"action_bar_toggle_mute": "Заглушаване или пускне на известията",
|
||||||
"action_bar_toggle_action_menu": "Отваряне или затваряне на менюто с действията",
|
"action_bar_toggle_action_menu": "Отваряне или затваряне на менюто с действията",
|
||||||
"nav_button_muted": "Известията са заглушени",
|
"nav_button_muted": "Известията са заглушени",
|
||||||
"notifications_list": "Списък с известия",
|
"notifications_list": "Списък с известия",
|
||||||
"notifications_list_item": "Известие",
|
"notifications_list_item": "Известие",
|
||||||
"notifications_delete": "Премахване",
|
"notifications_delete": "Премахване",
|
||||||
"notifications_mark_read": "Отбелязване като прочетено",
|
"notifications_mark_read": "Отбелязване като прочетено",
|
||||||
"nav_button_connecting": "свързване",
|
"nav_button_connecting": "свързване",
|
||||||
"message_bar_show_dialog": "Показване на диалога за публикуване",
|
"message_bar_show_dialog": "Показване на диалога за публикуване",
|
||||||
"message_bar_publish": "Публикуване на съобщение",
|
"message_bar_publish": "Публикуване на съобщение",
|
||||||
"notifications_priority_x": "Приоритет {{priority}}",
|
"notifications_priority_x": "Приоритет {{priority}}",
|
||||||
"notifications_new_indicator": "Ново известие",
|
"notifications_new_indicator": "Ново известие",
|
||||||
"notifications_attachment_image": "Прикачено изображение",
|
"notifications_attachment_image": "Прикачено изображение",
|
||||||
"notifications_attachment_file_image": "файл на изображение",
|
"notifications_attachment_file_image": "файл на изображение",
|
||||||
"notifications_attachment_file_video": "видео",
|
"notifications_attachment_file_video": "видео",
|
||||||
"notifications_attachment_file_audio": "аудио",
|
"notifications_attachment_file_audio": "аудио",
|
||||||
"notifications_attachment_file_app": "инсталационен файл на приложение за Android",
|
"notifications_attachment_file_app": "инсталационен файл на приложение за Android",
|
||||||
"notifications_attachment_file_document": "друг документ",
|
"notifications_attachment_file_document": "друг документ",
|
||||||
"publish_dialog_emoji_picker_show": "Избор на емоция",
|
"publish_dialog_emoji_picker_show": "Избор на емоция",
|
||||||
"publish_dialog_topic_reset": "Нулиране на тема",
|
"publish_dialog_topic_reset": "Нулиране на тема",
|
||||||
"publish_dialog_click_reset": "Премахване на адрес",
|
"publish_dialog_click_reset": "Премахване на адрес",
|
||||||
"publish_dialog_email_reset": "Премахване на препращането към ел. поща",
|
"publish_dialog_email_reset": "Премахване на препращането към ел. поща",
|
||||||
"publish_dialog_delay_reset": "Премахва забавянето на изпращането",
|
"publish_dialog_delay_reset": "Премахва забавянето на изпращането",
|
||||||
"publish_dialog_attached_file_remove": "Премахване на прикачения файл",
|
"publish_dialog_attached_file_remove": "Премахване на прикачения файл",
|
||||||
"emoji_picker_search_clear": "Изчистване на търсенето",
|
"emoji_picker_search_clear": "Изчистване на търсенето",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "Адрес на услугата",
|
"subscribe_dialog_subscribe_base_url_label": "Адрес на услугата",
|
||||||
"prefs_notifications_sound_play": "Възпроизвеждане на избрания звук",
|
"prefs_notifications_sound_play": "Възпроизвеждане на избрания звук",
|
||||||
"publish_dialog_attach_reset": "Премахване на адреса на файла за прикачане",
|
"publish_dialog_attach_reset": "Премахване на адреса на файла за прикачане",
|
||||||
"prefs_users_delete_button": "Премахване",
|
"prefs_users_delete_button": "Премахване",
|
||||||
"prefs_users_table": "Таблица с потребители",
|
"prefs_users_table": "Таблица с потребители",
|
||||||
"prefs_users_edit_button": "Промяна на потребител",
|
"prefs_users_edit_button": "Промяна на потребител",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Поверително разглеждане не се поддържа",
|
"error_boundary_unsupported_indexeddb_title": "Поверително разглеждане не се поддържа",
|
||||||
"error_boundary_unsupported_indexeddb_description": "За да работи интернет-приложението ntfy се нуждае от IndexedDB, а мрежовият четец не поддържа IndexedDB в режим на поверително разглеждане.<br/><br/>Въпреки това, няма смисъл да използвате интернет-приложението ntfy в режим на поверително разглеждане, тъй като всичко се пази в хранилището на четеца. Можете да прочетете повече по <githubLink>проблема в GitHub</githubLink> или да се свържете с нас в <discordLink>Discord</discordLink> или <matrixLink>Matrix</matrixLink>."
|
"error_boundary_unsupported_indexeddb_description": "За да работи интернет-приложението ntfy се нуждае от IndexedDB, а мрежовият четец не поддържа IndexedDB в режим на поверително разглеждане.<br/><br/>Въпреки това, няма смисъл да използвате интернет-приложението ntfy в режим на поверително разглеждане, тъй като всичко се пази в хранилището на четеца. Можете да прочетете повече по <githubLink>проблема в GitHub</githubLink> или да се свържете с нас в <discordLink>Discord</discordLink> или <matrixLink>Matrix</matrixLink>."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_settings": "Nastavení",
|
"action_bar_settings": "Nastavení",
|
||||||
"action_bar_send_test_notification": "Odeslání testovacího oznámení",
|
"action_bar_send_test_notification": "Odeslání testovacího oznámení",
|
||||||
"action_bar_clear_notifications": "Vymazat všechna oznámení",
|
"action_bar_clear_notifications": "Vymazat všechna oznámení",
|
||||||
"action_bar_unsubscribe": "Odhlásit odběr",
|
"action_bar_unsubscribe": "Odhlásit odběr",
|
||||||
"message_bar_type_message": "Zde napište zprávu",
|
"message_bar_type_message": "Zde napište zprávu",
|
||||||
"message_bar_error_publishing": "Chyba při odesílání oznámení",
|
"message_bar_error_publishing": "Chyba při odesílání oznámení",
|
||||||
"nav_topics_title": "Odebíraná témata",
|
"nav_topics_title": "Odebíraná témata",
|
||||||
"nav_button_all_notifications": "Všechna oznámení",
|
"nav_button_all_notifications": "Všechna oznámení",
|
||||||
"nav_button_settings": "Nastavení",
|
"nav_button_settings": "Nastavení",
|
||||||
"nav_button_documentation": "Dokumentace",
|
"nav_button_documentation": "Dokumentace",
|
||||||
"nav_button_publish_message": "Odeslat oznámení",
|
"nav_button_publish_message": "Odeslat oznámení",
|
||||||
"nav_button_subscribe": "Přihlásit se k odběru tématu",
|
"nav_button_subscribe": "Přihlásit se k odběru tématu",
|
||||||
"alert_grant_title": "Oznámení jsou zakázána",
|
"alert_grant_title": "Oznámení jsou zakázána",
|
||||||
"alert_grant_description": "Udělte prohlížeči oprávnění k zobrazování oznámení na ploše.",
|
"alert_grant_description": "Udělte prohlížeči oprávnění k zobrazování oznámení na ploše.",
|
||||||
"alert_grant_button": "Udělit nyní",
|
"alert_grant_button": "Udělit nyní",
|
||||||
"alert_not_supported_title": "Oznámení nejsou podporována",
|
"alert_not_supported_title": "Oznámení nejsou podporována",
|
||||||
"alert_not_supported_description": "Oznámení nejsou ve vašem prohlížeči podporována.",
|
"alert_not_supported_description": "Oznámení nejsou ve vašem prohlížeči podporována.",
|
||||||
"notifications_copied_to_clipboard": "Zkopírováno do schránky",
|
"notifications_copied_to_clipboard": "Zkopírováno do schránky",
|
||||||
"notifications_tags": "Značky",
|
"notifications_tags": "Značky",
|
||||||
"notifications_attachment_copy_url_title": "Kopírovat URL přílohy do schránky",
|
"notifications_attachment_copy_url_title": "Kopírovat URL přílohy do schránky",
|
||||||
"notifications_attachment_copy_url_button": "Kopírovat URL",
|
"notifications_attachment_copy_url_button": "Kopírovat URL",
|
||||||
"notifications_attachment_open_title": "Přejít na {{url}}",
|
"notifications_attachment_open_title": "Přejít na {{url}}",
|
||||||
"notifications_attachment_open_button": "Otevřít přílohu",
|
"notifications_attachment_open_button": "Otevřít přílohu",
|
||||||
"notifications_attachment_link_expires": "platnost odkazu končí {{date}}",
|
"notifications_attachment_link_expires": "platnost odkazu končí {{date}}",
|
||||||
"notifications_attachment_link_expired": "platnost odkazu ke stažení vypršela",
|
"notifications_attachment_link_expired": "platnost odkazu ke stažení vypršela",
|
||||||
"notifications_click_copy_url_title": "Kopírovat URL odkazu do schránky",
|
"notifications_click_copy_url_title": "Kopírovat URL odkazu do schránky",
|
||||||
"notifications_click_copy_url_button": "Kopírovat odkaz",
|
"notifications_click_copy_url_button": "Kopírovat odkaz",
|
||||||
"notifications_click_open_button": "Otevřít odkaz",
|
"notifications_click_open_button": "Otevřít odkaz",
|
||||||
"notifications_none_for_topic_title": "K tomuto tématu jste zatím neobdrželi žádné oznámení.",
|
"notifications_none_for_topic_title": "K tomuto tématu jste zatím neobdrželi žádné oznámení.",
|
||||||
"notifications_none_for_topic_description": "Pro odeslání oznámení k tomuto tématu, odešlete PUT nebo POST požadavek na URL tématu.",
|
"notifications_none_for_topic_description": "Pro odeslání oznámení k tomuto tématu, odešlete PUT nebo POST požadavek na URL tématu.",
|
||||||
"notifications_example": "Příklad",
|
"notifications_example": "Příklad",
|
||||||
"publish_dialog_base_url_placeholder": "URL služby, např. https://example.com",
|
"publish_dialog_base_url_placeholder": "URL služby, např. https://example.com",
|
||||||
"publish_dialog_topic_label": "Název tématu",
|
"publish_dialog_topic_label": "Název tématu",
|
||||||
"publish_dialog_topic_placeholder": "Název tématu, např. phil_alerts",
|
"publish_dialog_topic_placeholder": "Název tématu, např. phil_alerts",
|
||||||
"publish_dialog_priority_default": "Výchozí priorita",
|
"publish_dialog_priority_default": "Výchozí priorita",
|
||||||
"publish_dialog_priority_high": "Vysoká priorita",
|
"publish_dialog_priority_high": "Vysoká priorita",
|
||||||
"publish_dialog_priority_max": "Nevyšší priorita",
|
"publish_dialog_priority_max": "Nevyšší priorita",
|
||||||
"publish_dialog_base_url_label": "URL služby",
|
"publish_dialog_base_url_label": "URL služby",
|
||||||
"prefs_users_dialog_password_label": "Heslo",
|
"prefs_users_dialog_password_label": "Heslo",
|
||||||
"prefs_users_dialog_title_add": "Přidat uživatele",
|
"prefs_users_dialog_title_add": "Přidat uživatele",
|
||||||
"prefs_users_dialog_title_edit": "Upravit uživatele",
|
"prefs_users_dialog_title_edit": "Upravit uživatele",
|
||||||
"prefs_users_dialog_base_url_label": "URL služby, např. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL služby, např. https://ntfy.sh",
|
||||||
"prefs_users_dialog_username_label": "Uživatelské jméno, např. phil",
|
"prefs_users_dialog_username_label": "Uživatelské jméno, např. phil",
|
||||||
"notifications_actions_open_url_title": "Přejít na {{url}}",
|
"notifications_actions_open_url_title": "Přejít na {{url}}",
|
||||||
"notifications_none_for_any_title": "Neobdrželi jste žádná oznámení.",
|
"notifications_none_for_any_title": "Neobdrželi jste žádná oznámení.",
|
||||||
"notifications_none_for_any_description": "Pro odeslání oznámení k tématu stačí na URL tématu odeslat PUT nebo POST požadavek. Zde je příklad s použitím jednoho z vašich témat.",
|
"notifications_none_for_any_description": "Pro odeslání oznámení k tématu stačí na URL tématu odeslat PUT nebo POST požadavek. Zde je příklad s použitím jednoho z vašich témat.",
|
||||||
"notifications_no_subscriptions_description": "Kliknutím na \"{{linktext}}\" vytvoříte téma nebo se k němu přihlásíte. Poté můžete odesílat zprávy prostřednictvím PUT nebo POST požadavků a zde budete dostávat oznámení.",
|
"notifications_no_subscriptions_description": "Kliknutím na \"{{linktext}}\" vytvoříte téma nebo se k němu přihlásíte. Poté můžete odesílat zprávy prostřednictvím PUT nebo POST požadavků a zde budete dostávat oznámení.",
|
||||||
"notifications_more_details": "Další informace naleznete na <websiteLink>webových stránkách</websiteLink> nebo v <docsLink>dokumentaci</docsLink>.",
|
"notifications_more_details": "Další informace naleznete na <websiteLink>webových stránkách</websiteLink> nebo v <docsLink>dokumentaci</docsLink>.",
|
||||||
"publish_dialog_title_topic": "Odeslat do {{téma}}",
|
"publish_dialog_title_topic": "Odeslat do {{téma}}",
|
||||||
"publish_dialog_title_no_topic": "Odeslat oznámení",
|
"publish_dialog_title_no_topic": "Odeslat oznámení",
|
||||||
"publish_dialog_progress_uploading": "Nahrávání …",
|
"publish_dialog_progress_uploading": "Nahrávání …",
|
||||||
"publish_dialog_message_published": "Oznámení odesláno",
|
"publish_dialog_message_published": "Oznámení odesláno",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "překračuje {{fileSizeLimit}} limit souboru a kvótu, {{remainingBytes}} zbývá",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "překračuje {{fileSizeLimit}} limit souboru a kvótu, {{remainingBytes}} zbývá",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "překračuje kvótu, {{remainingBytes}} zbývá",
|
"publish_dialog_attachment_limits_quota_reached": "překračuje kvótu, {{remainingBytes}} zbývá",
|
||||||
"publish_dialog_priority_min": "Nejnižší priorita",
|
"publish_dialog_priority_min": "Nejnižší priorita",
|
||||||
"publish_dialog_title_label": "Název",
|
"publish_dialog_title_label": "Název",
|
||||||
"publish_dialog_title_placeholder": "Název oznámení, např. Upozornění na volné místo na disku",
|
"publish_dialog_title_placeholder": "Název oznámení, např. Upozornění na volné místo na disku",
|
||||||
"publish_dialog_message_placeholder": "Zde napište zprávu",
|
"publish_dialog_message_placeholder": "Zde napište zprávu",
|
||||||
"publish_dialog_tags_label": "Značky",
|
"publish_dialog_tags_label": "Značky",
|
||||||
"publish_dialog_priority_label": "Priorita",
|
"publish_dialog_priority_label": "Priorita",
|
||||||
"publish_dialog_click_label": "Klikněte na URL",
|
"publish_dialog_click_label": "Klikněte na URL",
|
||||||
"publish_dialog_click_placeholder": "Adresa URL, která se otevře po kliknutí na oznámení",
|
"publish_dialog_click_placeholder": "Adresa URL, která se otevře po kliknutí na oznámení",
|
||||||
"publish_dialog_email_label": "E-mail",
|
"publish_dialog_email_label": "E-mail",
|
||||||
"publish_dialog_email_placeholder": "Adresa pro odeslání oznámení, např. phil@example.com",
|
"publish_dialog_email_placeholder": "Adresa pro odeslání oznámení, např. phil@example.com",
|
||||||
"publish_dialog_attach_label": "URL přílohy",
|
"publish_dialog_attach_label": "URL přílohy",
|
||||||
"publish_dialog_filename_label": "Název souboru",
|
"publish_dialog_filename_label": "Název souboru",
|
||||||
"publish_dialog_filename_placeholder": "Název souboru přílohy",
|
"publish_dialog_filename_placeholder": "Název souboru přílohy",
|
||||||
"publish_dialog_delay_label": "Zpoždění",
|
"publish_dialog_delay_label": "Zpoždění",
|
||||||
"publish_dialog_delay_placeholder": "Zpožděné doručení, např. {{unixTimestamp}}, {{relativeTime}} nebo \"{{naturalLanguage}}\". (pouze v angličtině)",
|
"publish_dialog_delay_placeholder": "Zpožděné doručení, např. {{unixTimestamp}}, {{relativeTime}} nebo \"{{naturalLanguage}}\". (pouze v angličtině)",
|
||||||
"publish_dialog_chip_click_label": "Klikněte na URL",
|
"publish_dialog_chip_click_label": "Klikněte na URL",
|
||||||
"publish_dialog_chip_email_label": "Přeposlat na e-mail",
|
"publish_dialog_chip_email_label": "Přeposlat na e-mail",
|
||||||
"publish_dialog_chip_delay_label": "Zpožděné doručení",
|
"publish_dialog_chip_delay_label": "Zpožděné doručení",
|
||||||
"publish_dialog_chip_topic_label": "Změnit téma",
|
"publish_dialog_chip_topic_label": "Změnit téma",
|
||||||
"publish_dialog_details_examples_description": "Příklady a podrobný popis všech funkcí odesílání naleznete v <docsLink>dokumentaci</docsLink>.",
|
"publish_dialog_details_examples_description": "Příklady a podrobný popis všech funkcí odesílání naleznete v <docsLink>dokumentaci</docsLink>.",
|
||||||
"publish_dialog_chip_attach_url_label": "Připojit soubor pomocí URL",
|
"publish_dialog_chip_attach_url_label": "Připojit soubor pomocí URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Připojit místní soubor",
|
"publish_dialog_chip_attach_file_label": "Připojit místní soubor",
|
||||||
"publish_dialog_button_send": "Odeslat",
|
"publish_dialog_button_send": "Odeslat",
|
||||||
"publish_dialog_checkbox_publish_another": "Odeslat další",
|
"publish_dialog_checkbox_publish_another": "Odeslat další",
|
||||||
"publish_dialog_attached_file_title": "Přiložený soubor:",
|
"publish_dialog_attached_file_title": "Přiložený soubor:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Název souboru přílohy",
|
"publish_dialog_attached_file_filename_placeholder": "Název souboru přílohy",
|
||||||
"publish_dialog_drop_file_here": "Přetáhněte soubor sem",
|
"publish_dialog_drop_file_here": "Přetáhněte soubor sem",
|
||||||
"emoji_picker_search_placeholder": "Hledat emodži",
|
"emoji_picker_search_placeholder": "Hledat emodži",
|
||||||
"subscribe_dialog_subscribe_title": "Přihlásit odběr tématu",
|
"subscribe_dialog_subscribe_title": "Přihlásit odběr tématu",
|
||||||
"subscribe_dialog_subscribe_description": "Témata nemusí být chráněna heslem, proto zvolte název, který není snadné uhodnout. Jakmile se přihlásíte k odběru, můžete odesílat oznámení pomocí PUT/POST požadavků.",
|
"subscribe_dialog_subscribe_description": "Témata nemusí být chráněna heslem, proto zvolte název, který není snadné uhodnout. Jakmile se přihlásíte k odběru, můžete odesílat oznámení pomocí PUT/POST požadavků.",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Název tématu, např. phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Název tématu, např. phil_alerts",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Použít jiný server",
|
"subscribe_dialog_subscribe_use_another_label": "Použít jiný server",
|
||||||
"subscribe_dialog_login_title": "Vyžadováno přihlášení",
|
"subscribe_dialog_login_title": "Vyžadováno přihlášení",
|
||||||
"subscribe_dialog_login_description": "Toto téma je chráněno heslem. Pro přihlášení k odběru zadejte prosím uživatelské jméno a heslo.",
|
"subscribe_dialog_login_description": "Toto téma je chráněno heslem. Pro přihlášení k odběru zadejte prosím uživatelské jméno a heslo.",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Zrušit",
|
"subscribe_dialog_subscribe_button_cancel": "Zrušit",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Přihlásit odběr",
|
"subscribe_dialog_subscribe_button_subscribe": "Přihlásit odběr",
|
||||||
"subscribe_dialog_login_username_label": "Uživatelské jméno, např. phil",
|
"subscribe_dialog_login_username_label": "Uživatelské jméno, např. phil",
|
||||||
"subscribe_dialog_login_password_label": "Heslo",
|
"subscribe_dialog_login_password_label": "Heslo",
|
||||||
"subscribe_dialog_login_button_back": "Zpět",
|
"subscribe_dialog_login_button_back": "Zpět",
|
||||||
"subscribe_dialog_login_button_login": "Přihlásit se",
|
"subscribe_dialog_login_button_login": "Přihlásit se",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Uživatel {{username}} není autorizován",
|
"subscribe_dialog_error_user_not_authorized": "Uživatel {{username}} není autorizován",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonymně",
|
"subscribe_dialog_error_user_anonymous": "anonymně",
|
||||||
"prefs_notifications_title": "Oznámení",
|
"prefs_notifications_title": "Oznámení",
|
||||||
"prefs_notifications_sound_description_some": "Oznámení přehrají při doručení zvuk {{sound}}",
|
"prefs_notifications_sound_description_some": "Oznámení přehrají při doručení zvuk {{sound}}",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Zobrazit oznámení, pokud je priorita {{number}} ({{name}}) nebo vyšší",
|
"prefs_notifications_min_priority_description_x_or_higher": "Zobrazit oznámení, pokud je priorita {{number}} ({{name}}) nebo vyšší",
|
||||||
"prefs_notifications_min_priority_description_max": "Zobrazit oznámení, pokud je priorita 5 (nejvyšší)",
|
"prefs_notifications_min_priority_description_max": "Zobrazit oznámení, pokud je priorita 5 (nejvyšší)",
|
||||||
"prefs_notifications_min_priority_any": "Jakákoli priorita",
|
"prefs_notifications_min_priority_any": "Jakákoli priorita",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Nízká priorita a vyšší",
|
"prefs_notifications_min_priority_low_and_higher": "Nízká priorita a vyšší",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Výchozí priorita a vyšší",
|
"prefs_notifications_min_priority_default_and_higher": "Výchozí priorita a vyšší",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Vysoká priorita a vyšší",
|
"prefs_notifications_min_priority_high_and_higher": "Vysoká priorita a vyšší",
|
||||||
"prefs_notifications_delete_after_three_hours": "Po třech hodinách",
|
"prefs_notifications_delete_after_three_hours": "Po třech hodinách",
|
||||||
"prefs_notifications_delete_after_one_day": "Po jednom dni",
|
"prefs_notifications_delete_after_one_day": "Po jednom dni",
|
||||||
"prefs_notifications_delete_after_one_week": "Po jednom týdnu",
|
"prefs_notifications_delete_after_one_week": "Po jednom týdnu",
|
||||||
"prefs_notifications_delete_after_one_month": "Po jednom měsíci",
|
"prefs_notifications_delete_after_one_month": "Po jednom měsíci",
|
||||||
"prefs_notifications_delete_after_never_description": "Oznámení nejsou nikdy automaticky mazána",
|
"prefs_notifications_delete_after_never_description": "Oznámení nejsou nikdy automaticky mazána",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Oznámení se automaticky odstraní po třech hodinách",
|
"prefs_notifications_delete_after_three_hours_description": "Oznámení se automaticky odstraní po třech hodinách",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Oznámení se automaticky odstraní po jednom dni",
|
"prefs_notifications_delete_after_one_day_description": "Oznámení se automaticky odstraní po jednom dni",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Oznámení se automaticky odstraní po jednom týdnu",
|
"prefs_notifications_delete_after_one_week_description": "Oznámení se automaticky odstraní po jednom týdnu",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Oznámení se automaticky odstraní po jednom měsíci",
|
"prefs_notifications_delete_after_one_month_description": "Oznámení se automaticky odstraní po jednom měsíci",
|
||||||
"prefs_users_title": "Správa uživatelů",
|
"prefs_users_title": "Správa uživatelů",
|
||||||
"prefs_users_add_button": "Přidat uživatele",
|
"prefs_users_add_button": "Přidat uživatele",
|
||||||
"prefs_users_table_user_header": "Uživatel",
|
"prefs_users_table_user_header": "Uživatel",
|
||||||
"prefs_users_table_base_url_header": "URL služby",
|
"prefs_users_table_base_url_header": "URL služby",
|
||||||
"prefs_users_dialog_button_cancel": "Zrušit",
|
"prefs_users_dialog_button_cancel": "Zrušit",
|
||||||
"prefs_users_dialog_button_add": "Přidat",
|
"prefs_users_dialog_button_add": "Přidat",
|
||||||
"prefs_users_dialog_button_save": "Uložit",
|
"prefs_users_dialog_button_save": "Uložit",
|
||||||
"priority_min": "nejnižší",
|
"priority_min": "nejnižší",
|
||||||
"priority_low": "nízká",
|
"priority_low": "nízká",
|
||||||
"priority_default": "výchozí",
|
"priority_default": "výchozí",
|
||||||
"priority_high": "vysoká",
|
"priority_high": "vysoká",
|
||||||
"priority_max": "nejvyšší",
|
"priority_max": "nejvyšší",
|
||||||
"error_boundary_title": "Ale ne, ntfy havaroval",
|
"error_boundary_title": "Ale ne, ntfy havaroval",
|
||||||
"error_boundary_description": "K tomu by samozřejmě nemělo docházet. Velmi se za to omlouváme.<br/>Pokud máte chvilku, nahlaste to prosím <githubLink>na GitHubu</githubLink> nebo nám dejte vědět prostřednictvím <discordLink>Discordu</discordLink> nebo <matrixLink>Matrixu</matrixLink>.",
|
"error_boundary_description": "K tomu by samozřejmě nemělo docházet. Velmi se za to omlouváme.<br/>Pokud máte chvilku, nahlaste to prosím <githubLink>na GitHubu</githubLink> nebo nám dejte vědět prostřednictvím <discordLink>Discordu</discordLink> nebo <matrixLink>Matrixu</matrixLink>.",
|
||||||
"error_boundary_button_copy_stack_trace": "Kopírovat výpis zásobníku",
|
"error_boundary_button_copy_stack_trace": "Kopírovat výpis zásobníku",
|
||||||
"error_boundary_stack_trace": "Výpis zásobníku",
|
"error_boundary_stack_trace": "Výpis zásobníku",
|
||||||
"publish_dialog_tags_placeholder": "Seznam značek oddělených čárkou, např. warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "Seznam značek oddělených čárkou, např. warning, srv1-backup",
|
||||||
"notifications_actions_not_supported": "Akce není podporována ve webové aplikaci",
|
"notifications_actions_not_supported": "Akce není podporována ve webové aplikaci",
|
||||||
"notifications_actions_http_request_title": "Odeslat HTTP {{metoda}} na {{url}}",
|
"notifications_actions_http_request_title": "Odeslat HTTP {{metoda}} na {{url}}",
|
||||||
"notifications_no_subscriptions_title": "Vypadá to, že ještě nemáte žádné odběry.",
|
"notifications_no_subscriptions_title": "Vypadá to, že ještě nemáte žádné odběry.",
|
||||||
"prefs_notifications_min_priority_description_any": "Zobrazit všechna oznámení bez ohledu na prioritu",
|
"prefs_notifications_min_priority_description_any": "Zobrazit všechna oznámení bez ohledu na prioritu",
|
||||||
"publish_dialog_priority_low": "Nízká priorita",
|
"publish_dialog_priority_low": "Nízká priorita",
|
||||||
"publish_dialog_message_label": "Zpráva",
|
"publish_dialog_message_label": "Zpráva",
|
||||||
"publish_dialog_button_cancel": "Zrušit",
|
"publish_dialog_button_cancel": "Zrušit",
|
||||||
"notifications_loading": "Načítání oznámení …",
|
"notifications_loading": "Načítání oznámení …",
|
||||||
"publish_dialog_progress_uploading_detail": "Nahrávání {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Nahrávání {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_attachment_limits_file_reached": "překračuje {{fileSizeLimit}} limit souboru",
|
"publish_dialog_attachment_limits_file_reached": "překračuje {{fileSizeLimit}} limit souboru",
|
||||||
"publish_dialog_attach_placeholder": "Připojit soubor pomocí URL, např. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Připojit soubor pomocí URL, např. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_button_cancel_sending": "Zrušit odesílání",
|
"publish_dialog_button_cancel_sending": "Zrušit odesílání",
|
||||||
"publish_dialog_other_features": "Další funkce:",
|
"publish_dialog_other_features": "Další funkce:",
|
||||||
"prefs_notifications_sound_title": "Zvuk oznámení",
|
"prefs_notifications_sound_title": "Zvuk oznámení",
|
||||||
"prefs_notifications_min_priority_max_only": "Pouze nejvyšší priorita",
|
"prefs_notifications_min_priority_max_only": "Pouze nejvyšší priorita",
|
||||||
"prefs_notifications_min_priority_title": "Nejnižší priorita",
|
"prefs_notifications_min_priority_title": "Nejnižší priorita",
|
||||||
"prefs_notifications_delete_after_title": "Odstranit oznámení",
|
"prefs_notifications_delete_after_title": "Odstranit oznámení",
|
||||||
"prefs_notifications_delete_after_never": "Nikdy",
|
"prefs_notifications_delete_after_never": "Nikdy",
|
||||||
"prefs_notifications_sound_no_sound": "Žádný zvuk",
|
"prefs_notifications_sound_no_sound": "Žádný zvuk",
|
||||||
"prefs_notifications_sound_description_none": "Oznámení nepřehrají při doručení žádný zvuk",
|
"prefs_notifications_sound_description_none": "Oznámení nepřehrají při doručení žádný zvuk",
|
||||||
"prefs_users_description": "Zde můžete přidávat/odebírat uživatele pro chráněná témata. Upozorňujeme, že uživatelské jméno a heslo jsou uloženy v místním úložišti prohlížeče.",
|
"prefs_users_description": "Zde můžete přidávat/odebírat uživatele pro chráněná témata. Upozorňujeme, že uživatelské jméno a heslo jsou uloženy v místním úložišti prohlížeče.",
|
||||||
"error_boundary_gathering_info": "Získejte více informací …",
|
"error_boundary_gathering_info": "Získejte více informací …",
|
||||||
"prefs_appearance_language_title": "Jazyk",
|
"prefs_appearance_language_title": "Jazyk",
|
||||||
"prefs_appearance_title": "Vzhled",
|
"prefs_appearance_title": "Vzhled",
|
||||||
"action_bar_show_menu": "Zobrazit nabídku",
|
"action_bar_show_menu": "Zobrazit nabídku",
|
||||||
"action_bar_logo_alt": "logo ntfy",
|
"action_bar_logo_alt": "logo ntfy",
|
||||||
"action_bar_toggle_mute": "Ztlumení/zrušení ztlumení oznámení",
|
"action_bar_toggle_mute": "Ztlumení/zrušení ztlumení oznámení",
|
||||||
"action_bar_toggle_action_menu": "Otevřít/zavřít nabídku akcí",
|
"action_bar_toggle_action_menu": "Otevřít/zavřít nabídku akcí",
|
||||||
"message_bar_show_dialog": "Zobrazit okno pro odesílání oznámení",
|
"message_bar_show_dialog": "Zobrazit okno pro odesílání oznámení",
|
||||||
"message_bar_publish": "Odeslat zprávu",
|
"message_bar_publish": "Odeslat zprávu",
|
||||||
"nav_button_muted": "Oznámení ztlumena",
|
"nav_button_muted": "Oznámení ztlumena",
|
||||||
"nav_button_connecting": "připojování",
|
"nav_button_connecting": "připojování",
|
||||||
"notifications_list": "Seznam oznámení",
|
"notifications_list": "Seznam oznámení",
|
||||||
"notifications_list_item": "Oznámení",
|
"notifications_list_item": "Oznámení",
|
||||||
"notifications_mark_read": "Označit jako přečtené",
|
"notifications_mark_read": "Označit jako přečtené",
|
||||||
"notifications_delete": "Smazat",
|
"notifications_delete": "Smazat",
|
||||||
"notifications_new_indicator": "Nové oznámení",
|
"notifications_new_indicator": "Nové oznámení",
|
||||||
"notifications_attachment_image": "Obrázek přílohy",
|
"notifications_attachment_image": "Obrázek přílohy",
|
||||||
"notifications_attachment_file_image": "soubor s obrázkem",
|
"notifications_attachment_file_image": "soubor s obrázkem",
|
||||||
"notifications_attachment_file_video": "video soubor",
|
"notifications_attachment_file_video": "video soubor",
|
||||||
"notifications_attachment_file_audio": "zvukový soubor",
|
"notifications_attachment_file_audio": "zvukový soubor",
|
||||||
"notifications_attachment_file_app": "Soubor s aplikací pro Android",
|
"notifications_attachment_file_app": "Soubor s aplikací pro Android",
|
||||||
"publish_dialog_emoji_picker_show": "Vybrat emoji",
|
"publish_dialog_emoji_picker_show": "Vybrat emoji",
|
||||||
"publish_dialog_topic_reset": "Obnovení tématu",
|
"publish_dialog_topic_reset": "Obnovení tématu",
|
||||||
"publish_dialog_click_reset": "Odebrat URL kliknutím",
|
"publish_dialog_click_reset": "Odebrat URL kliknutím",
|
||||||
"publish_dialog_email_reset": "Odebrat přeposlání e-mailu",
|
"publish_dialog_email_reset": "Odebrat přeposlání e-mailu",
|
||||||
"publish_dialog_attach_reset": "Odebrat URL přílohy",
|
"publish_dialog_attach_reset": "Odebrat URL přílohy",
|
||||||
"publish_dialog_attached_file_remove": "Odebrat přiložený soubor",
|
"publish_dialog_attached_file_remove": "Odebrat přiložený soubor",
|
||||||
"emoji_picker_search_clear": "Vyčistit vyhledávání",
|
"emoji_picker_search_clear": "Vyčistit vyhledávání",
|
||||||
"prefs_users_edit_button": "Upravit uživatele",
|
"prefs_users_edit_button": "Upravit uživatele",
|
||||||
"prefs_users_delete_button": "Odstranit uživatele",
|
"prefs_users_delete_button": "Odstranit uživatele",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Soukromé prohlížení není podporováno",
|
"error_boundary_unsupported_indexeddb_title": "Soukromé prohlížení není podporováno",
|
||||||
"error_boundary_unsupported_indexeddb_description": "Webová aplikace ntfy potřebuje ke svému fungování databázi IndexedDB a váš prohlížeč v režimu soukromého prohlížení databázi IndexedDB nepodporuje.<br/><br/>To je sice nepříjemné, ale používat webovou aplikaci ntfy v režimu soukromého prohlížení stejně nemá smysl, protože vše je uloženo v úložišti prohlížeče. Více se o tom můžete dočíst <githubLink>v tomto tématu na GitHubu</githubLink>, nebo se na nás obrátit pomocí služeb <discordLink>Discord</discordLink> nebo <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_unsupported_indexeddb_description": "Webová aplikace ntfy potřebuje ke svému fungování databázi IndexedDB a váš prohlížeč v režimu soukromého prohlížení databázi IndexedDB nepodporuje.<br/><br/>To je sice nepříjemné, ale používat webovou aplikaci ntfy v režimu soukromého prohlížení stejně nemá smysl, protože vše je uloženo v úložišti prohlížeče. Více se o tom můžete dočíst <githubLink>v tomto tématu na GitHubu</githubLink>, nebo se na nás obrátit pomocí služeb <discordLink>Discord</discordLink> nebo <matrixLink>Matrix</matrixLink>.",
|
||||||
"notifications_priority_x": "Priorita {{priority}}",
|
"notifications_priority_x": "Priorita {{priority}}",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL služby",
|
"subscribe_dialog_subscribe_base_url_label": "URL služby",
|
||||||
"prefs_notifications_sound_play": "Přehrát vybraný zvuk",
|
"prefs_notifications_sound_play": "Přehrát vybraný zvuk",
|
||||||
"prefs_users_table": "Tabulka uživatelů",
|
"prefs_users_table": "Tabulka uživatelů",
|
||||||
"notifications_attachment_file_document": "jiný dokument",
|
"notifications_attachment_file_document": "jiný dokument",
|
||||||
"publish_dialog_delay_reset": "Odebrat odložené doručení"
|
"publish_dialog_delay_reset": "Odebrat odložené doručení"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"nav_topics_title": "Abonnierte Themen",
|
"nav_topics_title": "Abonnierte Themen",
|
||||||
"nav_button_all_notifications": "Alle Benachrichtigungen",
|
"nav_button_all_notifications": "Alle Benachrichtigungen",
|
||||||
"nav_button_settings": "Einstellungen",
|
"nav_button_settings": "Einstellungen",
|
||||||
"nav_button_documentation": "Dokumentation",
|
"nav_button_documentation": "Dokumentation",
|
||||||
"nav_button_publish_message": "Benachrichtigung senden",
|
"nav_button_publish_message": "Benachrichtigung senden",
|
||||||
"nav_button_subscribe": "Thema abonnieren",
|
"nav_button_subscribe": "Thema abonnieren",
|
||||||
"alert_grant_title": "Benachrichtigungen sind deaktiviert",
|
"alert_grant_title": "Benachrichtigungen sind deaktiviert",
|
||||||
"publish_dialog_base_url_label": "Service-URL",
|
"publish_dialog_base_url_label": "Service-URL",
|
||||||
"publish_dialog_details_examples_description": "Beispiele und ausführliche Informationen zu allen Optionen findest Du in der <docsLink>Dokumentation</docsLink>.",
|
"publish_dialog_details_examples_description": "Beispiele und ausführliche Informationen zu allen Optionen findest Du in der <docsLink>Dokumentation</docsLink>.",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Dateiname des Anhangs",
|
"publish_dialog_attached_file_filename_placeholder": "Dateiname des Anhangs",
|
||||||
"subscribe_dialog_login_description": "Dieses Thema benötigt eine Anmeldung. Bitte gib Benutzernamen und Kennwort ein.",
|
"subscribe_dialog_login_description": "Dieses Thema benötigt eine Anmeldung. Bitte gib Benutzernamen und Kennwort ein.",
|
||||||
"prefs_notifications_title": "Benachrichtigungen",
|
"prefs_notifications_title": "Benachrichtigungen",
|
||||||
"prefs_notifications_sound_title": "Benachrichtigungston",
|
"prefs_notifications_sound_title": "Benachrichtigungston",
|
||||||
"prefs_notifications_min_priority_max_only": "Nur höchste Priorität",
|
"prefs_notifications_min_priority_max_only": "Nur höchste Priorität",
|
||||||
"prefs_notifications_delete_after_never": "Nie",
|
"prefs_notifications_delete_after_never": "Nie",
|
||||||
"prefs_users_dialog_password_label": "Kennwort",
|
"prefs_users_dialog_password_label": "Kennwort",
|
||||||
"prefs_users_dialog_button_cancel": "Abbrechen",
|
"prefs_users_dialog_button_cancel": "Abbrechen",
|
||||||
"prefs_users_dialog_button_add": "Hinzufügen",
|
"prefs_users_dialog_button_add": "Hinzufügen",
|
||||||
"prefs_users_dialog_button_save": "Speichern",
|
"prefs_users_dialog_button_save": "Speichern",
|
||||||
"prefs_appearance_language_title": "Sprache",
|
"prefs_appearance_language_title": "Sprache",
|
||||||
"notifications_none_for_any_description": "Um Benachrichtigungen an ein Thema zu senden, schicke einen PUT/POST-Request an die Themen-URL. Hier ist ein Beispiel mit einem Deiner Themen.",
|
"notifications_none_for_any_description": "Um Benachrichtigungen an ein Thema zu senden, schicke einen PUT/POST-Request an die Themen-URL. Hier ist ein Beispiel mit einem Deiner Themen.",
|
||||||
"publish_dialog_message_placeholder": "Gib hier eine Nachricht ein",
|
"publish_dialog_message_placeholder": "Gib hier eine Nachricht ein",
|
||||||
"notifications_attachment_link_expires": "Link läuft ab am/um {{date}}",
|
"notifications_attachment_link_expires": "Link läuft ab am/um {{date}}",
|
||||||
"notifications_click_copy_url_title": "Link-URL in Zwischenablage kopieren",
|
"notifications_click_copy_url_title": "Link-URL in Zwischenablage kopieren",
|
||||||
"publish_dialog_priority_low": "Niedrige Priorität",
|
"publish_dialog_priority_low": "Niedrige Priorität",
|
||||||
"publish_dialog_message_label": "Nachricht",
|
"publish_dialog_message_label": "Nachricht",
|
||||||
"action_bar_unsubscribe": "Von Thema abmelden",
|
"action_bar_unsubscribe": "Von Thema abmelden",
|
||||||
"notifications_copied_to_clipboard": "In Zwischenablage kopiert",
|
"notifications_copied_to_clipboard": "In Zwischenablage kopiert",
|
||||||
"notifications_loading": "Benachrichtigungen werden geladen …",
|
"notifications_loading": "Benachrichtigungen werden geladen …",
|
||||||
"notifications_attachment_open_title": "Gehe zu {{url}}",
|
"notifications_attachment_open_title": "Gehe zu {{url}}",
|
||||||
"notifications_none_for_any_title": "Du hast keine Benachrichtigungen empfangen.",
|
"notifications_none_for_any_title": "Du hast keine Benachrichtigungen empfangen.",
|
||||||
"action_bar_send_test_notification": "Test-Benachrichtigung senden",
|
"action_bar_send_test_notification": "Test-Benachrichtigung senden",
|
||||||
"alert_grant_description": "Dem Browser erlauben, Desktop-Benachrichtigungen anzuzeigen.",
|
"alert_grant_description": "Dem Browser erlauben, Desktop-Benachrichtigungen anzuzeigen.",
|
||||||
"notifications_tags": "Tags",
|
"notifications_tags": "Tags",
|
||||||
"message_bar_type_message": "Gib hier eine Nachricht ein",
|
"message_bar_type_message": "Gib hier eine Nachricht ein",
|
||||||
"message_bar_error_publishing": "Fehler beim Senden der Benachrichtigung",
|
"message_bar_error_publishing": "Fehler beim Senden der Benachrichtigung",
|
||||||
"alert_not_supported_title": "Benachrichtigungen werden nicht unterstützt",
|
"alert_not_supported_title": "Benachrichtigungen werden nicht unterstützt",
|
||||||
"alert_not_supported_description": "Benachrichtigungen werden von Deinem Browser nicht unterstützt.",
|
"alert_not_supported_description": "Benachrichtigungen werden von Deinem Browser nicht unterstützt.",
|
||||||
"action_bar_settings": "Einstellungen",
|
"action_bar_settings": "Einstellungen",
|
||||||
"action_bar_clear_notifications": "Alle Benachrichtigungen löschen",
|
"action_bar_clear_notifications": "Alle Benachrichtigungen löschen",
|
||||||
"alert_grant_button": "Jetzt erlauben",
|
"alert_grant_button": "Jetzt erlauben",
|
||||||
"notifications_none_for_topic_title": "Du hast für dieses Thema noch keine Benachrichtigungen empfangen.",
|
"notifications_none_for_topic_title": "Du hast für dieses Thema noch keine Benachrichtigungen empfangen.",
|
||||||
"notifications_click_open_button": "Link öffnen",
|
"notifications_click_open_button": "Link öffnen",
|
||||||
"notifications_more_details": "Ausführlichere Informationen findest Du auf der <websiteLink>Website</websiteLink> und in der <docsLink>Dokumentation</docsLink>.",
|
"notifications_more_details": "Ausführlichere Informationen findest Du auf der <websiteLink>Website</websiteLink> und in der <docsLink>Dokumentation</docsLink>.",
|
||||||
"notifications_attachment_copy_url_title": "URL des Anhangs in Zwischenablage kopieren",
|
"notifications_attachment_copy_url_title": "URL des Anhangs in Zwischenablage kopieren",
|
||||||
"notifications_attachment_copy_url_button": "URL kopieren",
|
"notifications_attachment_copy_url_button": "URL kopieren",
|
||||||
"notifications_attachment_open_button": "Anhang öffnen",
|
"notifications_attachment_open_button": "Anhang öffnen",
|
||||||
"notifications_attachment_link_expired": "Download-Link ist abgelaufen",
|
"notifications_attachment_link_expired": "Download-Link ist abgelaufen",
|
||||||
"notifications_click_copy_url_button": "Link kopieren",
|
"notifications_click_copy_url_button": "Link kopieren",
|
||||||
"notifications_actions_open_url_title": "Gehe zu {{url}}",
|
"notifications_actions_open_url_title": "Gehe zu {{url}}",
|
||||||
"publish_dialog_other_features": "Andere Optionen:",
|
"publish_dialog_other_features": "Andere Optionen:",
|
||||||
"notifications_none_for_topic_description": "Um Benachrichtigungen an dieses Thema zu senden, PUTe/POSTe an die Themen-URL.",
|
"notifications_none_for_topic_description": "Um Benachrichtigungen an dieses Thema zu senden, PUTe/POSTe an die Themen-URL.",
|
||||||
"notifications_no_subscriptions_title": "Anscheinend hast Du noch keine Themen abonniert.",
|
"notifications_no_subscriptions_title": "Anscheinend hast Du noch keine Themen abonniert.",
|
||||||
"notifications_no_subscriptions_description": "Klicke den „{{linktext}}“-Link um ein Thema zu erstellen oder zu abonnieren. Danach kannst Du Nachrichten per PUT oder POST senden und erhältst hier die Benachrichtigungen.",
|
"notifications_no_subscriptions_description": "Klicke den „{{linktext}}“-Link um ein Thema zu erstellen oder zu abonnieren. Danach kannst Du Nachrichten per PUT oder POST senden und erhältst hier die Benachrichtigungen.",
|
||||||
"notifications_example": "Beispiel",
|
"notifications_example": "Beispiel",
|
||||||
"publish_dialog_progress_uploading": "Wird hochgeladen …",
|
"publish_dialog_progress_uploading": "Wird hochgeladen …",
|
||||||
"publish_dialog_title_topic": "Senden an {{topic}}",
|
"publish_dialog_title_topic": "Senden an {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Benachrichtigung senden",
|
"publish_dialog_title_no_topic": "Benachrichtigung senden",
|
||||||
"publish_dialog_message_published": "Benachrichtigung gesendet",
|
"publish_dialog_message_published": "Benachrichtigung gesendet",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "überschreitet das Dateigrößen-Limit {{fileSizeLimit}} und die Quota, {{remainingBytes}} übrig",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "überschreitet das Dateigrößen-Limit {{fileSizeLimit}} und die Quota, {{remainingBytes}} übrig",
|
||||||
"publish_dialog_progress_uploading_detail": "Hochladen {{loaded}}/{{total}} ({{percent}} %) …",
|
"publish_dialog_progress_uploading_detail": "Hochladen {{loaded}}/{{total}} ({{percent}} %) …",
|
||||||
"publish_dialog_priority_max": "Max. Priorität",
|
"publish_dialog_priority_max": "Max. Priorität",
|
||||||
"publish_dialog_topic_placeholder": "Thema, z.B. phil_alerts",
|
"publish_dialog_topic_placeholder": "Thema, z.B. phil_alerts",
|
||||||
"publish_dialog_attachment_limits_file_reached": "überschreitet das Dateigrößen-Limit {{filesizeLimit}}",
|
"publish_dialog_attachment_limits_file_reached": "überschreitet das Dateigrößen-Limit {{filesizeLimit}}",
|
||||||
"publish_dialog_topic_label": "Thema",
|
"publish_dialog_topic_label": "Thema",
|
||||||
"publish_dialog_priority_default": "Standard-Priorität",
|
"publish_dialog_priority_default": "Standard-Priorität",
|
||||||
"publish_dialog_base_url_placeholder": "Service-URL, z.B. https://example.com",
|
"publish_dialog_base_url_placeholder": "Service-URL, z.B. https://example.com",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "überschreitet die Quota, {{remainingBytes}} übrig",
|
"publish_dialog_attachment_limits_quota_reached": "überschreitet die Quota, {{remainingBytes}} übrig",
|
||||||
"publish_dialog_priority_min": "Min. Priorität",
|
"publish_dialog_priority_min": "Min. Priorität",
|
||||||
"publish_dialog_priority_high": "Hohe Priorität",
|
"publish_dialog_priority_high": "Hohe Priorität",
|
||||||
"publish_dialog_title_label": "Titel",
|
"publish_dialog_title_label": "Titel",
|
||||||
"publish_dialog_tags_placeholder": "Komma-getrennte Liste von Tags, z.B. Warnung, srv1-Backup",
|
"publish_dialog_tags_placeholder": "Komma-getrennte Liste von Tags, z.B. Warnung, srv1-Backup",
|
||||||
"publish_dialog_priority_label": "Priorität",
|
"publish_dialog_priority_label": "Priorität",
|
||||||
"publish_dialog_filename_label": "Dateiname",
|
"publish_dialog_filename_label": "Dateiname",
|
||||||
"publish_dialog_title_placeholder": "Benachrichtigungs-Titel, z.B. CPU-Last-Warnung",
|
"publish_dialog_title_placeholder": "Benachrichtigungs-Titel, z.B. CPU-Last-Warnung",
|
||||||
"publish_dialog_tags_label": "Tags",
|
"publish_dialog_tags_label": "Tags",
|
||||||
"publish_dialog_click_label": "Klick-URL",
|
"publish_dialog_click_label": "Klick-URL",
|
||||||
"publish_dialog_click_placeholder": "URL die geöffnet werden soll, wenn die Benachrichtigung angeklickt wird",
|
"publish_dialog_click_placeholder": "URL die geöffnet werden soll, wenn die Benachrichtigung angeklickt wird",
|
||||||
"publish_dialog_email_label": "E-Mail",
|
"publish_dialog_email_label": "E-Mail",
|
||||||
"publish_dialog_attach_label": "URL des Anhangs",
|
"publish_dialog_attach_label": "URL des Anhangs",
|
||||||
"publish_dialog_attach_placeholder": "Datei von URL anhängen, z.B. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Datei von URL anhängen, z.B. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_filename_placeholder": "Dateiname des Anhangs",
|
"publish_dialog_filename_placeholder": "Dateiname des Anhangs",
|
||||||
"publish_dialog_delay_label": "Verzögerung",
|
"publish_dialog_delay_label": "Verzögerung",
|
||||||
"publish_dialog_email_placeholder": "E-Mail-Adresse, an die die Benachrichtigung gesendet werden soll, z.B. phil@example.com",
|
"publish_dialog_email_placeholder": "E-Mail-Adresse, an die die Benachrichtigung gesendet werden soll, z.B. phil@example.com",
|
||||||
"publish_dialog_chip_click_label": "Klick-URL",
|
"publish_dialog_chip_click_label": "Klick-URL",
|
||||||
"publish_dialog_button_cancel_sending": "Senden abbrechen",
|
"publish_dialog_button_cancel_sending": "Senden abbrechen",
|
||||||
"publish_dialog_drop_file_here": "Datei hierher ziehen",
|
"publish_dialog_drop_file_here": "Datei hierher ziehen",
|
||||||
"publish_dialog_chip_email_label": "An E-Mail weiterleiten",
|
"publish_dialog_chip_email_label": "An E-Mail weiterleiten",
|
||||||
"publish_dialog_button_cancel": "Abbrechen",
|
"publish_dialog_button_cancel": "Abbrechen",
|
||||||
"publish_dialog_chip_attach_file_label": "Lokale Datei anhängen",
|
"publish_dialog_chip_attach_file_label": "Lokale Datei anhängen",
|
||||||
"prefs_notifications_min_priority_title": "Minimale Priorität",
|
"prefs_notifications_min_priority_title": "Minimale Priorität",
|
||||||
"prefs_users_add_button": "Benutzer hinzufügen",
|
"prefs_users_add_button": "Benutzer hinzufügen",
|
||||||
"publish_dialog_delay_placeholder": "Auslieferung verzögern, z.B. {{unixTimestamp}}, {{relativeTime}}, oder \"{{naturalLanguage}}\" (nur Englisch)",
|
"publish_dialog_delay_placeholder": "Auslieferung verzögern, z.B. {{unixTimestamp}}, {{relativeTime}}, oder \"{{naturalLanguage}}\" (nur Englisch)",
|
||||||
"prefs_appearance_title": "Darstellung",
|
"prefs_appearance_title": "Darstellung",
|
||||||
"subscribe_dialog_login_password_label": "Kennwort",
|
"subscribe_dialog_login_password_label": "Kennwort",
|
||||||
"subscribe_dialog_login_button_back": "Zurück",
|
"subscribe_dialog_login_button_back": "Zurück",
|
||||||
"publish_dialog_chip_attach_url_label": "Datei von URL anhängen",
|
"publish_dialog_chip_attach_url_label": "Datei von URL anhängen",
|
||||||
"publish_dialog_chip_delay_label": "Auslieferung verzögern",
|
"publish_dialog_chip_delay_label": "Auslieferung verzögern",
|
||||||
"publish_dialog_chip_topic_label": "Thema ändern",
|
"publish_dialog_chip_topic_label": "Thema ändern",
|
||||||
"subscribe_dialog_subscribe_title": "Thema abonnieren",
|
"subscribe_dialog_subscribe_title": "Thema abonnieren",
|
||||||
"subscribe_dialog_login_username_label": "Benutzername, z.B. phil",
|
"subscribe_dialog_login_username_label": "Benutzername, z.B. phil",
|
||||||
"subscribe_dialog_login_button_login": "Anmelden",
|
"subscribe_dialog_login_button_login": "Anmelden",
|
||||||
"prefs_notifications_sound_no_sound": "Kein Ton",
|
"prefs_notifications_sound_no_sound": "Kein Ton",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Standard-Priorität und höher",
|
"prefs_notifications_min_priority_default_and_higher": "Standard-Priorität und höher",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Thema, z.B. phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Thema, z.B. phil_alerts",
|
||||||
"publish_dialog_button_send": "Senden",
|
"publish_dialog_button_send": "Senden",
|
||||||
"publish_dialog_checkbox_publish_another": "Weitere Nachricht senden",
|
"publish_dialog_checkbox_publish_another": "Weitere Nachricht senden",
|
||||||
"publish_dialog_attached_file_title": "Dateianhang:",
|
"publish_dialog_attached_file_title": "Dateianhang:",
|
||||||
"emoji_picker_search_placeholder": "Emoji suchen",
|
"emoji_picker_search_placeholder": "Emoji suchen",
|
||||||
"subscribe_dialog_subscribe_description": "Themen sind evtl. nicht kennwort-geschützt, also wähle einen schwer zu erratenden Namen. Nach dem Abonnieren kannst Du Benachrichtigungen per POST/PUT senden.",
|
"subscribe_dialog_subscribe_description": "Themen sind evtl. nicht kennwort-geschützt, also wähle einen schwer zu erratenden Namen. Nach dem Abonnieren kannst Du Benachrichtigungen per POST/PUT senden.",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Anderen Server verwenden",
|
"subscribe_dialog_subscribe_use_another_label": "Anderen Server verwenden",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Abbrechen",
|
"subscribe_dialog_subscribe_button_cancel": "Abbrechen",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Abonnieren",
|
"subscribe_dialog_subscribe_button_subscribe": "Abonnieren",
|
||||||
"subscribe_dialog_login_title": "Anmeldung erforderlich",
|
"subscribe_dialog_login_title": "Anmeldung erforderlich",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonym",
|
"subscribe_dialog_error_user_anonymous": "anonym",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Benutzer {{username}} hat keine Berechtigung",
|
"subscribe_dialog_error_user_not_authorized": "Benutzer {{username}} hat keine Berechtigung",
|
||||||
"prefs_notifications_min_priority_any": "Alle Prioritäten",
|
"prefs_notifications_min_priority_any": "Alle Prioritäten",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Niedrige Priorität und höher",
|
"prefs_notifications_min_priority_low_and_higher": "Niedrige Priorität und höher",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Hohe Priorität und höher",
|
"prefs_notifications_min_priority_high_and_higher": "Hohe Priorität und höher",
|
||||||
"prefs_notifications_delete_after_title": "Benachrichtigungen löschen",
|
"prefs_notifications_delete_after_title": "Benachrichtigungen löschen",
|
||||||
"prefs_notifications_delete_after_three_hours": "Nach drei Stunden",
|
"prefs_notifications_delete_after_three_hours": "Nach drei Stunden",
|
||||||
"prefs_users_dialog_title_edit": "Benutzer bearbeiten",
|
"prefs_users_dialog_title_edit": "Benutzer bearbeiten",
|
||||||
"prefs_notifications_delete_after_one_day": "Nach einem Tag",
|
"prefs_notifications_delete_after_one_day": "Nach einem Tag",
|
||||||
"prefs_notifications_delete_after_one_week": "Nach einer Woche",
|
"prefs_notifications_delete_after_one_week": "Nach einer Woche",
|
||||||
"prefs_notifications_delete_after_one_month": "Nach einem Monat",
|
"prefs_notifications_delete_after_one_month": "Nach einem Monat",
|
||||||
"prefs_users_title": "Benutzer verwalten",
|
"prefs_users_title": "Benutzer verwalten",
|
||||||
"prefs_users_table_user_header": "Benutzer",
|
"prefs_users_table_user_header": "Benutzer",
|
||||||
"prefs_users_table_base_url_header": "Service-URL",
|
"prefs_users_table_base_url_header": "Service-URL",
|
||||||
"prefs_users_dialog_base_url_label": "Service-URL, z.B. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "Service-URL, z.B. https://ntfy.sh",
|
||||||
"prefs_users_dialog_username_label": "Benutzername, z.B. phil",
|
"prefs_users_dialog_username_label": "Benutzername, z.B. phil",
|
||||||
"prefs_users_description": "Benutzer für kennwort-geschützte Themen hinzufügen/löschen. Achtung: Benutzername und Kennwort werden im lokalen Browser-Speicher abgelegt.",
|
"prefs_users_description": "Benutzer für kennwort-geschützte Themen hinzufügen/löschen. Achtung: Benutzername und Kennwort werden im lokalen Browser-Speicher abgelegt.",
|
||||||
"prefs_users_dialog_title_add": "Benutzer hinzufügen",
|
"prefs_users_dialog_title_add": "Benutzer hinzufügen",
|
||||||
"error_boundary_title": "Oh nein, ntfy ist abgestürzt",
|
"error_boundary_title": "Oh nein, ntfy ist abgestürzt",
|
||||||
"error_boundary_description": "Das sollte offensichtlich nicht passieren. Sorry.<br/>Wenn möglich, <githubLink>melde den Fehler auf GitHub</githubLink> oder schreibe uns auf <discordLink>Discord</discordLink> oder <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Das sollte offensichtlich nicht passieren. Sorry.<br/>Wenn möglich, <githubLink>melde den Fehler auf GitHub</githubLink> oder schreibe uns auf <discordLink>Discord</discordLink> oder <matrixLink>Matrix</matrixLink>.",
|
||||||
"error_boundary_stack_trace": "Stacktrace",
|
"error_boundary_stack_trace": "Stacktrace",
|
||||||
"error_boundary_gathering_info": "Weitere Informationen sammeln …",
|
"error_boundary_gathering_info": "Weitere Informationen sammeln …",
|
||||||
"error_boundary_button_copy_stack_trace": "Stacktrace kopieren",
|
"error_boundary_button_copy_stack_trace": "Stacktrace kopieren",
|
||||||
"prefs_notifications_delete_after_never_description": "Benachrichtigungen werden nie automatisch gelöscht",
|
"prefs_notifications_delete_after_never_description": "Benachrichtigungen werden nie automatisch gelöscht",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Benachrichtigungen werden nach einem Monat automatisch gelöscht",
|
"prefs_notifications_delete_after_one_month_description": "Benachrichtigungen werden nach einem Monat automatisch gelöscht",
|
||||||
"prefs_notifications_min_priority_description_any": "Alle Benachrichtigungen (aller Prioritäten) anzeigen",
|
"prefs_notifications_min_priority_description_any": "Alle Benachrichtigungen (aller Prioritäten) anzeigen",
|
||||||
"prefs_notifications_min_priority_description_max": "Zeige Benachrichtigungen wenn ihre Priorität5 (max) ist",
|
"prefs_notifications_min_priority_description_max": "Zeige Benachrichtigungen wenn ihre Priorität5 (max) ist",
|
||||||
"priority_low": "niedrig",
|
"priority_low": "niedrig",
|
||||||
"priority_default": "Standard",
|
"priority_default": "Standard",
|
||||||
"priority_high": "hoch",
|
"priority_high": "hoch",
|
||||||
"priority_max": "max",
|
"priority_max": "max",
|
||||||
"prefs_notifications_sound_description_none": "Kein Ton beim Empfang einer Benachrichtigung",
|
"prefs_notifications_sound_description_none": "Kein Ton beim Empfang einer Benachrichtigung",
|
||||||
"prefs_notifications_sound_description_some": "Sound {{sound}} beim Eintreffen einer Benachrichtigung abspielen",
|
"prefs_notifications_sound_description_some": "Sound {{sound}} beim Eintreffen einer Benachrichtigung abspielen",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Zeige Benachrichtigungen wenn ihre Priorität {{number}} ({{name}}) oder höher ist",
|
"prefs_notifications_min_priority_description_x_or_higher": "Zeige Benachrichtigungen wenn ihre Priorität {{number}} ({{name}}) oder höher ist",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Benachrichtigungen werden nach drei Stunden automatisch gelöscht",
|
"prefs_notifications_delete_after_three_hours_description": "Benachrichtigungen werden nach drei Stunden automatisch gelöscht",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Benachrichtigungen werden nach einem Tag automatisch gelöscht",
|
"prefs_notifications_delete_after_one_day_description": "Benachrichtigungen werden nach einem Tag automatisch gelöscht",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Benachrichtigungen werden nach einer Woche automatisch gelöscht",
|
"prefs_notifications_delete_after_one_week_description": "Benachrichtigungen werden nach einer Woche automatisch gelöscht",
|
||||||
"priority_min": "min",
|
"priority_min": "min",
|
||||||
"notifications_actions_not_supported": "Diese Aktion wird in der Web-App nicht unterstützt",
|
"notifications_actions_not_supported": "Diese Aktion wird in der Web-App nicht unterstützt",
|
||||||
"notifications_actions_http_request_title": "Sende HTTP {{method}} an {{url}}",
|
"notifications_actions_http_request_title": "Sende HTTP {{method}} an {{url}}",
|
||||||
"action_bar_show_menu": "Menü anzeigen",
|
"action_bar_show_menu": "Menü anzeigen",
|
||||||
"action_bar_toggle_mute": "Stummschaltung der Benachrichtigungen an/aus",
|
"action_bar_toggle_mute": "Stummschaltung der Benachrichtigungen an/aus",
|
||||||
"message_bar_show_dialog": "Dialog zur Veröffentlichung anzeigen",
|
"message_bar_show_dialog": "Dialog zur Veröffentlichung anzeigen",
|
||||||
"message_bar_publish": "Benachrichtigung veröffentlichen",
|
"message_bar_publish": "Benachrichtigung veröffentlichen",
|
||||||
"nav_button_connecting": "verbinde",
|
"nav_button_connecting": "verbinde",
|
||||||
"notifications_list": "Benachrichtigungsliste",
|
"notifications_list": "Benachrichtigungsliste",
|
||||||
"notifications_mark_read": "Als gelesen markieren",
|
"notifications_mark_read": "Als gelesen markieren",
|
||||||
"notifications_delete": "Löschen",
|
"notifications_delete": "Löschen",
|
||||||
"notifications_priority_x": "Priorität {{priority}}",
|
"notifications_priority_x": "Priorität {{priority}}",
|
||||||
"notifications_attachment_file_image": "Bilddatei",
|
"notifications_attachment_file_image": "Bilddatei",
|
||||||
"notifications_attachment_image": "Bild des Anhangs",
|
"notifications_attachment_image": "Bild des Anhangs",
|
||||||
"notifications_attachment_file_video": "Videodatei",
|
"notifications_attachment_file_video": "Videodatei",
|
||||||
"notifications_attachment_file_audio": "Audiodatei",
|
"notifications_attachment_file_audio": "Audiodatei",
|
||||||
"notifications_attachment_file_app": "Android App-Datei",
|
"notifications_attachment_file_app": "Android App-Datei",
|
||||||
"notifications_attachment_file_document": "anderes Dokument",
|
"notifications_attachment_file_document": "anderes Dokument",
|
||||||
"publish_dialog_attached_file_remove": "Angehängte Datei entfernen",
|
"publish_dialog_attached_file_remove": "Angehängte Datei entfernen",
|
||||||
"emoji_picker_search_clear": "Suche leeren",
|
"emoji_picker_search_clear": "Suche leeren",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "Service URL",
|
"subscribe_dialog_subscribe_base_url_label": "Service URL",
|
||||||
"prefs_notifications_sound_play": "Gewählten Sound abspielen",
|
"prefs_notifications_sound_play": "Gewählten Sound abspielen",
|
||||||
"prefs_users_table": "Benutzertabelle",
|
"prefs_users_table": "Benutzertabelle",
|
||||||
"prefs_users_edit_button": "Benutzer bearbeiten",
|
"prefs_users_edit_button": "Benutzer bearbeiten",
|
||||||
"prefs_users_delete_button": "Benutzer löschen",
|
"prefs_users_delete_button": "Benutzer löschen",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Private Browser-Tabs werden nicht unterstützt",
|
"error_boundary_unsupported_indexeddb_title": "Private Browser-Tabs werden nicht unterstützt",
|
||||||
"publish_dialog_delay_reset": "Verzögerte Zustellung entfernen",
|
"publish_dialog_delay_reset": "Verzögerte Zustellung entfernen",
|
||||||
"error_boundary_unsupported_indexeddb_description": "Die ntfy Web-App benötigt eine IndexedDB für eine korrekte Funktion, und Dein Browser unterstützt in privaten Tabs keinen IndexedDB.<br/><br/>Das ist zwar ärgerlich, eine Nutzung von ntfy in einem privaten Tab macht aber auch wenig Sinn da alle Daten im Browser gespeichert werden. Weitere Informationen gibt es <githubLink>in diesem GitHub-Issue</githubLink>, oder im Chat bei <discordLink>Discord</discordLink> oder <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_unsupported_indexeddb_description": "Die ntfy Web-App benötigt eine IndexedDB für eine korrekte Funktion, und Dein Browser unterstützt in privaten Tabs keinen IndexedDB.<br/><br/>Das ist zwar ärgerlich, eine Nutzung von ntfy in einem privaten Tab macht aber auch wenig Sinn da alle Daten im Browser gespeichert werden. Weitere Informationen gibt es <githubLink>in diesem GitHub-Issue</githubLink>, oder im Chat bei <discordLink>Discord</discordLink> oder <matrixLink>Matrix</matrixLink>.",
|
||||||
"action_bar_toggle_action_menu": "Aktionsmenü öffnen/schließen",
|
"action_bar_toggle_action_menu": "Aktionsmenü öffnen/schließen",
|
||||||
"notifications_new_indicator": "Neue Benachrichtigung",
|
"notifications_new_indicator": "Neue Benachrichtigung",
|
||||||
"publish_dialog_email_reset": "Email-Weiterleitung entfernen",
|
"publish_dialog_email_reset": "Email-Weiterleitung entfernen",
|
||||||
"action_bar_logo_alt": "ntfy Logo",
|
"action_bar_logo_alt": "ntfy Logo",
|
||||||
"nav_button_muted": "Benachrichtigungen stummgeschaltet",
|
"nav_button_muted": "Benachrichtigungen stummgeschaltet",
|
||||||
"notifications_list_item": "Benachrichtigung",
|
"notifications_list_item": "Benachrichtigung",
|
||||||
"publish_dialog_emoji_picker_show": "Emoji wählen",
|
"publish_dialog_emoji_picker_show": "Emoji wählen",
|
||||||
"publish_dialog_topic_reset": "Thema zurücksetzen",
|
"publish_dialog_topic_reset": "Thema zurücksetzen",
|
||||||
"publish_dialog_attach_reset": "angehängte URL entfernen",
|
"publish_dialog_attach_reset": "angehängte URL entfernen",
|
||||||
"publish_dialog_click_reset": "Klick-URL entfernen"
|
"publish_dialog_click_reset": "Klick-URL entfernen"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_settings": "Configuración",
|
"action_bar_settings": "Configuración",
|
||||||
"action_bar_send_test_notification": "Enviar notificación de prueba",
|
"action_bar_send_test_notification": "Enviar notificación de prueba",
|
||||||
"action_bar_clear_notifications": "Borrar todas las notificaciones",
|
"action_bar_clear_notifications": "Borrar todas las notificaciones",
|
||||||
"nav_topics_title": "Tópicos suscritos",
|
"nav_topics_title": "Tópicos suscritos",
|
||||||
"alert_grant_button": "Conceder ahora",
|
"alert_grant_button": "Conceder ahora",
|
||||||
"action_bar_unsubscribe": "Cancelar la suscripción",
|
"action_bar_unsubscribe": "Cancelar la suscripción",
|
||||||
"message_bar_type_message": "Escriba un mensaje aquí",
|
"message_bar_type_message": "Escriba un mensaje aquí",
|
||||||
"message_bar_error_publishing": "Error al publicar la notificación",
|
"message_bar_error_publishing": "Error al publicar la notificación",
|
||||||
"alert_grant_title": "Las notificaciones están deshabilitadas",
|
"alert_grant_title": "Las notificaciones están deshabilitadas",
|
||||||
"alert_grant_description": "Concede a tu navegador permiso para mostrar notificaciones en el escritorio.",
|
"alert_grant_description": "Concede a tu navegador permiso para mostrar notificaciones en el escritorio.",
|
||||||
"nav_button_all_notifications": "Todas las notificaciones",
|
"nav_button_all_notifications": "Todas las notificaciones",
|
||||||
"nav_button_settings": "Ajustes",
|
"nav_button_settings": "Ajustes",
|
||||||
"nav_button_subscribe": "Suscribirse al tópico",
|
"nav_button_subscribe": "Suscribirse al tópico",
|
||||||
"nav_button_documentation": "Documentación",
|
"nav_button_documentation": "Documentación",
|
||||||
"nav_button_publish_message": "Publicar notificación",
|
"nav_button_publish_message": "Publicar notificación",
|
||||||
"notifications_copied_to_clipboard": "Copiado al portapapeles",
|
"notifications_copied_to_clipboard": "Copiado al portapapeles",
|
||||||
"alert_not_supported_title": "Notificaciones no soportadas",
|
"alert_not_supported_title": "Notificaciones no soportadas",
|
||||||
"alert_not_supported_description": "Las notificaciones no están soportadas por tu navegador.",
|
"alert_not_supported_description": "Las notificaciones no están soportadas por tu navegador.",
|
||||||
"notifications_tags": "Etiquetas",
|
"notifications_tags": "Etiquetas",
|
||||||
"notifications_attachment_copy_url_title": "Copiar la URL del archivo adjunto en el portapapeles",
|
"notifications_attachment_copy_url_title": "Copiar la URL del archivo adjunto en el portapapeles",
|
||||||
"notifications_attachment_copy_url_button": "Copiar URL",
|
"notifications_attachment_copy_url_button": "Copiar URL",
|
||||||
"notifications_attachment_open_title": "Ir a {{url}}",
|
"notifications_attachment_open_title": "Ir a {{url}}",
|
||||||
"notifications_attachment_open_button": "Abrir archivo adjunto",
|
"notifications_attachment_open_button": "Abrir archivo adjunto",
|
||||||
"notifications_attachment_link_expires": "el enlace expira el día {{fecha}}",
|
"notifications_attachment_link_expires": "el enlace expira el día {{fecha}}",
|
||||||
"notifications_attachment_link_expired": "el enlace de descarga ha expirado",
|
"notifications_attachment_link_expired": "el enlace de descarga ha expirado",
|
||||||
"notifications_click_copy_url_title": "Copiar la URL del enlace en el portapapeles",
|
"notifications_click_copy_url_title": "Copiar la URL del enlace en el portapapeles",
|
||||||
"notifications_click_copy_url_button": "Copiar enlace",
|
"notifications_click_copy_url_button": "Copiar enlace",
|
||||||
"notifications_actions_open_url_title": "Ir a {{url}}",
|
"notifications_actions_open_url_title": "Ir a {{url}}",
|
||||||
"notifications_click_open_button": "Abrir enlace",
|
"notifications_click_open_button": "Abrir enlace",
|
||||||
"notifications_none_for_topic_title": "Aún no has recibido ninguna notificación en este tópico.",
|
"notifications_none_for_topic_title": "Aún no has recibido ninguna notificación en este tópico.",
|
||||||
"notifications_none_for_topic_description": "Para enviar notificaciones a este tópico, simplemente realice un PUT o POST a la URL del tópico.",
|
"notifications_none_for_topic_description": "Para enviar notificaciones a este tópico, simplemente realice un PUT o POST a la URL del tópico.",
|
||||||
"notifications_none_for_any_title": "No ha recibido ninguna notificación.",
|
"notifications_none_for_any_title": "No ha recibido ninguna notificación.",
|
||||||
"notifications_no_subscriptions_title": "Parece que aún no tiene ninguna suscripción.",
|
"notifications_no_subscriptions_title": "Parece que aún no tiene ninguna suscripción.",
|
||||||
"notifications_no_subscriptions_description": "Haga clic en el enlace \"{{linktext}}\" para crear o suscribirse a un tópico. Después, puede enviar mensajes a través de un PUT o POST y recibirá notificaciones aquí.",
|
"notifications_no_subscriptions_description": "Haga clic en el enlace \"{{linktext}}\" para crear o suscribirse a un tópico. Después, puede enviar mensajes a través de un PUT o POST y recibirá notificaciones aquí.",
|
||||||
"notifications_more_details": "Para más información, consulta la <websiteLink>página web</websiteLink> o la <docsLink>documentación</docsLink>.",
|
"notifications_more_details": "Para más información, consulta la <websiteLink>página web</websiteLink> o la <docsLink>documentación</docsLink>.",
|
||||||
"notifications_loading": "Cargando notificaciones …",
|
"notifications_loading": "Cargando notificaciones …",
|
||||||
"publish_dialog_title_topic": "Publicar en {{topic}}",
|
"publish_dialog_title_topic": "Publicar en {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Publicar notificación",
|
"publish_dialog_title_no_topic": "Publicar notificación",
|
||||||
"publish_dialog_progress_uploading": "Cargando …",
|
"publish_dialog_progress_uploading": "Cargando …",
|
||||||
"publish_dialog_progress_uploading_detail": "Cargando {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Cargando {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_message_published": "Notificación publicada",
|
"publish_dialog_message_published": "Notificación publicada",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "supera el límite y la cuota de archivos de {{fileSizeLimit}}, restan {{remainingBytes}}",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "supera el límite y la cuota de archivos de {{fileSizeLimit}}, restan {{remainingBytes}}",
|
||||||
"publish_dialog_attachment_limits_file_reached": "supera el límite de archivos de {{fileSizeLimit}}",
|
"publish_dialog_attachment_limits_file_reached": "supera el límite de archivos de {{fileSizeLimit}}",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "supera la cuota, restan {{remainingBytes}}",
|
"publish_dialog_attachment_limits_quota_reached": "supera la cuota, restan {{remainingBytes}}",
|
||||||
"publish_dialog_priority_min": "Prioridad mínima",
|
"publish_dialog_priority_min": "Prioridad mínima",
|
||||||
"publish_dialog_priority_default": "Prioridad predeterminada",
|
"publish_dialog_priority_default": "Prioridad predeterminada",
|
||||||
"publish_dialog_priority_max": "Prioridad máxima",
|
"publish_dialog_priority_max": "Prioridad máxima",
|
||||||
"publish_dialog_base_url_label": "URL del servicio",
|
"publish_dialog_base_url_label": "URL del servicio",
|
||||||
"publish_dialog_base_url_placeholder": "URL del servicio, por ejemplo, https://example.com",
|
"publish_dialog_base_url_placeholder": "URL del servicio, por ejemplo, https://example.com",
|
||||||
"publish_dialog_topic_label": "Nombre del tópico",
|
"publish_dialog_topic_label": "Nombre del tópico",
|
||||||
"publish_dialog_topic_placeholder": "Nombre del tópico, ej. phil_alerts",
|
"publish_dialog_topic_placeholder": "Nombre del tópico, ej. phil_alerts",
|
||||||
"publish_dialog_title_label": "Título",
|
"publish_dialog_title_label": "Título",
|
||||||
"publish_dialog_message_label": "Mensaje",
|
"publish_dialog_message_label": "Mensaje",
|
||||||
"publish_dialog_tags_placeholder": "Lista de etiquetas separadas por comas, por ejemplo: warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "Lista de etiquetas separadas por comas, por ejemplo: warning, srv1-backup",
|
||||||
"publish_dialog_click_label": "Click URL",
|
"publish_dialog_click_label": "Click URL",
|
||||||
"publish_dialog_click_placeholder": "URL que se abre cuando se hace click en la notificación",
|
"publish_dialog_click_placeholder": "URL que se abre cuando se hace click en la notificación",
|
||||||
"publish_dialog_email_label": "Email",
|
"publish_dialog_email_label": "Email",
|
||||||
"publish_dialog_email_placeholder": "Dirección a la que se reenviará la notificación, por ejemplo, phil@example.com",
|
"publish_dialog_email_placeholder": "Dirección a la que se reenviará la notificación, por ejemplo, phil@example.com",
|
||||||
"publish_dialog_attach_label": "URL del archivo adjunto",
|
"publish_dialog_attach_label": "URL del archivo adjunto",
|
||||||
"publish_dialog_filename_label": "Nombre del archivo",
|
"publish_dialog_filename_label": "Nombre del archivo",
|
||||||
"publish_dialog_delay_placeholder": "Retraso en la entrega, por ejemplo, {{unixTimestamp}}, {{relativeTime}}, o \"{{naturalLanguage}}\" (sólo en inglés)",
|
"publish_dialog_delay_placeholder": "Retraso en la entrega, por ejemplo, {{unixTimestamp}}, {{relativeTime}}, o \"{{naturalLanguage}}\" (sólo en inglés)",
|
||||||
"publish_dialog_other_features": "Otras características:",
|
"publish_dialog_other_features": "Otras características:",
|
||||||
"publish_dialog_chip_click_label": "Click URL",
|
"publish_dialog_chip_click_label": "Click URL",
|
||||||
"publish_dialog_chip_email_label": "Reenviar al email",
|
"publish_dialog_chip_email_label": "Reenviar al email",
|
||||||
"publish_dialog_chip_attach_url_label": "Adjuntar un archivo por URL",
|
"publish_dialog_chip_attach_url_label": "Adjuntar un archivo por URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Adjuntar archivo local",
|
"publish_dialog_chip_attach_file_label": "Adjuntar archivo local",
|
||||||
"publish_dialog_chip_topic_label": "Cambiar de tópico",
|
"publish_dialog_chip_topic_label": "Cambiar de tópico",
|
||||||
"publish_dialog_button_cancel_sending": "Cancelar el envío",
|
"publish_dialog_button_cancel_sending": "Cancelar el envío",
|
||||||
"publish_dialog_button_cancel": "Cancelar",
|
"publish_dialog_button_cancel": "Cancelar",
|
||||||
"publish_dialog_checkbox_publish_another": "Publicar otro",
|
"publish_dialog_checkbox_publish_another": "Publicar otro",
|
||||||
"publish_dialog_attached_file_title": "Archivo adjunto:",
|
"publish_dialog_attached_file_title": "Archivo adjunto:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Nombre del archivo adjunto",
|
"publish_dialog_attached_file_filename_placeholder": "Nombre del archivo adjunto",
|
||||||
"publish_dialog_drop_file_here": "Suelta el archivo aquí",
|
"publish_dialog_drop_file_here": "Suelta el archivo aquí",
|
||||||
"emoji_picker_search_placeholder": "Buscar emojis",
|
"emoji_picker_search_placeholder": "Buscar emojis",
|
||||||
"subscribe_dialog_subscribe_title": "Suscribirse al tópico",
|
"subscribe_dialog_subscribe_title": "Suscribirse al tópico",
|
||||||
"subscribe_dialog_subscribe_description": "Los tópicos pueden no estar protegidos por contraseña, así que elija un nombre que no sea fácil de adivinar. Una vez suscrito, puede hacer PUT/POST de notificaciones.",
|
"subscribe_dialog_subscribe_description": "Los tópicos pueden no estar protegidos por contraseña, así que elija un nombre que no sea fácil de adivinar. Una vez suscrito, puede hacer PUT/POST de notificaciones.",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Nombre del tópico, ej. phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Nombre del tópico, ej. phil_alerts",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Usar otro servidor",
|
"subscribe_dialog_subscribe_use_another_label": "Usar otro servidor",
|
||||||
"subscribe_dialog_login_title": "Es necesario iniciar sesión",
|
"subscribe_dialog_login_title": "Es necesario iniciar sesión",
|
||||||
"subscribe_dialog_login_description": "Este tópico está protegido por contraseña. Por favor, introduzca su nombre de usuario y contraseña para suscribirse.",
|
"subscribe_dialog_login_description": "Este tópico está protegido por contraseña. Por favor, introduzca su nombre de usuario y contraseña para suscribirse.",
|
||||||
"subscribe_dialog_login_username_label": "Nombre de usuario, ej. phil",
|
"subscribe_dialog_login_username_label": "Nombre de usuario, ej. phil",
|
||||||
"subscribe_dialog_login_password_label": "Contraseña",
|
"subscribe_dialog_login_password_label": "Contraseña",
|
||||||
"subscribe_dialog_login_button_back": "Volver",
|
"subscribe_dialog_login_button_back": "Volver",
|
||||||
"subscribe_dialog_login_button_login": "Iniciar sesión",
|
"subscribe_dialog_login_button_login": "Iniciar sesión",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Usuario {{username}} no autorizado",
|
"subscribe_dialog_error_user_not_authorized": "Usuario {{username}} no autorizado",
|
||||||
"subscribe_dialog_error_user_anonymous": "anónimo",
|
"subscribe_dialog_error_user_anonymous": "anónimo",
|
||||||
"prefs_notifications_title": "Notificaciones",
|
"prefs_notifications_title": "Notificaciones",
|
||||||
"prefs_notifications_sound_title": "Sonido de notificación",
|
"prefs_notifications_sound_title": "Sonido de notificación",
|
||||||
"prefs_notifications_min_priority_any": "Cualquier prioridad",
|
"prefs_notifications_min_priority_any": "Cualquier prioridad",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Prioridad baja y superior",
|
"prefs_notifications_min_priority_low_and_higher": "Prioridad baja y superior",
|
||||||
"prefs_notifications_min_priority_max_only": "Solo prioridad máxima",
|
"prefs_notifications_min_priority_max_only": "Solo prioridad máxima",
|
||||||
"prefs_notifications_delete_after_title": "Eliminar notificaciones",
|
"prefs_notifications_delete_after_title": "Eliminar notificaciones",
|
||||||
"prefs_notifications_delete_after_never": "Nunca",
|
"prefs_notifications_delete_after_never": "Nunca",
|
||||||
"prefs_notifications_delete_after_three_hours": "Después de tres horas",
|
"prefs_notifications_delete_after_three_hours": "Después de tres horas",
|
||||||
"prefs_notifications_delete_after_one_day": "Después de un día",
|
"prefs_notifications_delete_after_one_day": "Después de un día",
|
||||||
"prefs_notifications_delete_after_one_week": "Después de una semana",
|
"prefs_notifications_delete_after_one_week": "Después de una semana",
|
||||||
"prefs_notifications_delete_after_one_month": "Después de un mes",
|
"prefs_notifications_delete_after_one_month": "Después de un mes",
|
||||||
"prefs_users_title": "Administrar usuarios",
|
"prefs_users_title": "Administrar usuarios",
|
||||||
"prefs_users_description": "Añada/elimine usuarios para sus tópicos protegidos aquí. Tenga en cuenta que el nombre de usuario y la contraseña se guardan en el almacenamiento local del navegador.",
|
"prefs_users_description": "Añada/elimine usuarios para sus tópicos protegidos aquí. Tenga en cuenta que el nombre de usuario y la contraseña se guardan en el almacenamiento local del navegador.",
|
||||||
"prefs_users_add_button": "Añadir usuario",
|
"prefs_users_add_button": "Añadir usuario",
|
||||||
"prefs_users_dialog_title_edit": "Editar usuario",
|
"prefs_users_dialog_title_edit": "Editar usuario",
|
||||||
"prefs_users_dialog_base_url_label": "URL del servicio, ej. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL del servicio, ej. https://ntfy.sh",
|
||||||
"prefs_users_dialog_button_add": "Añadir",
|
"prefs_users_dialog_button_add": "Añadir",
|
||||||
"prefs_users_dialog_button_save": "Guardar",
|
"prefs_users_dialog_button_save": "Guardar",
|
||||||
"prefs_appearance_title": "Apariencia",
|
"prefs_appearance_title": "Apariencia",
|
||||||
"prefs_appearance_language_title": "Idioma",
|
"prefs_appearance_language_title": "Idioma",
|
||||||
"error_boundary_title": "Oh no, ntfy tuvo un error",
|
"error_boundary_title": "Oh no, ntfy tuvo un error",
|
||||||
"error_boundary_button_copy_stack_trace": "Copiar el stack trace",
|
"error_boundary_button_copy_stack_trace": "Copiar el stack trace",
|
||||||
"error_boundary_stack_trace": "Stack trace",
|
"error_boundary_stack_trace": "Stack trace",
|
||||||
"error_boundary_gathering_info": "Reunir más información …",
|
"error_boundary_gathering_info": "Reunir más información …",
|
||||||
"notifications_example": "Ejemplo",
|
"notifications_example": "Ejemplo",
|
||||||
"prefs_notifications_min_priority_title": "Prioridad mínima",
|
"prefs_notifications_min_priority_title": "Prioridad mínima",
|
||||||
"notifications_none_for_any_description": "Para enviar notificaciones a un tópico, simplemente realice un PUT o POST a la URL del tópico. Aquí hay un ejemplo usando uno de sus tópicos.",
|
"notifications_none_for_any_description": "Para enviar notificaciones a un tópico, simplemente realice un PUT o POST a la URL del tópico. Aquí hay un ejemplo usando uno de sus tópicos.",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Cancelar",
|
"subscribe_dialog_subscribe_button_cancel": "Cancelar",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Suscribir",
|
"subscribe_dialog_subscribe_button_subscribe": "Suscribir",
|
||||||
"publish_dialog_message_placeholder": "Escriba un mensaje aquí",
|
"publish_dialog_message_placeholder": "Escriba un mensaje aquí",
|
||||||
"publish_dialog_tags_label": "Etiquetas",
|
"publish_dialog_tags_label": "Etiquetas",
|
||||||
"publish_dialog_priority_label": "Prioridad",
|
"publish_dialog_priority_label": "Prioridad",
|
||||||
"publish_dialog_priority_low": "Prioridad baja",
|
"publish_dialog_priority_low": "Prioridad baja",
|
||||||
"publish_dialog_priority_high": "Prioridad alta",
|
"publish_dialog_priority_high": "Prioridad alta",
|
||||||
"publish_dialog_delay_label": "Retraso",
|
"publish_dialog_delay_label": "Retraso",
|
||||||
"publish_dialog_title_placeholder": "Título de la notificación, por ejemplo, Alerta de espacio en disco",
|
"publish_dialog_title_placeholder": "Título de la notificación, por ejemplo, Alerta de espacio en disco",
|
||||||
"publish_dialog_details_examples_description": "Para ver ejemplos y una descripción detallada de todas las funciones de envío, consulte la <docsLink>documentación</docsLink>.",
|
"publish_dialog_details_examples_description": "Para ver ejemplos y una descripción detallada de todas las funciones de envío, consulte la <docsLink>documentación</docsLink>.",
|
||||||
"publish_dialog_attach_placeholder": "Adjuntar un archivo por URL, por ejemplo, https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Adjuntar un archivo por URL, por ejemplo, https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_filename_placeholder": "Nombre del archivo adjunto",
|
"publish_dialog_filename_placeholder": "Nombre del archivo adjunto",
|
||||||
"publish_dialog_chip_delay_label": "Retraso en la entrega",
|
"publish_dialog_chip_delay_label": "Retraso en la entrega",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Prioridad predeterminada y superior",
|
"prefs_notifications_min_priority_default_and_higher": "Prioridad predeterminada y superior",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Prioridad alta y superior",
|
"prefs_notifications_min_priority_high_and_higher": "Prioridad alta y superior",
|
||||||
"prefs_users_table_user_header": "Usuario",
|
"prefs_users_table_user_header": "Usuario",
|
||||||
"prefs_users_table_base_url_header": "URL del servicio",
|
"prefs_users_table_base_url_header": "URL del servicio",
|
||||||
"publish_dialog_button_send": "Enviar",
|
"publish_dialog_button_send": "Enviar",
|
||||||
"prefs_notifications_sound_no_sound": "Sin sonido",
|
"prefs_notifications_sound_no_sound": "Sin sonido",
|
||||||
"prefs_users_dialog_password_label": "Contraseña",
|
"prefs_users_dialog_password_label": "Contraseña",
|
||||||
"error_boundary_description": "Obviamente, esto no debería ocurrir. Lo sentimos mucho.<br/>Si tienes un minuto, por favor <githubLink>informa de esto en GitHub</githubLink>, o avísanos vía <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Obviamente, esto no debería ocurrir. Lo sentimos mucho.<br/>Si tienes un minuto, por favor <githubLink>informa de esto en GitHub</githubLink>, o avísanos vía <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink>.",
|
||||||
"prefs_users_dialog_title_add": "Añadir usuario",
|
"prefs_users_dialog_title_add": "Añadir usuario",
|
||||||
"prefs_users_dialog_button_cancel": "Cancelar",
|
"prefs_users_dialog_button_cancel": "Cancelar",
|
||||||
"prefs_users_dialog_username_label": "Nombre de usuario, ej. phil",
|
"prefs_users_dialog_username_label": "Nombre de usuario, ej. phil",
|
||||||
"priority_max": "máx",
|
"priority_max": "máx",
|
||||||
"priority_high": "alta",
|
"priority_high": "alta",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Las notificaciones se eliminan automáticamente después de un mes",
|
"prefs_notifications_delete_after_one_month_description": "Las notificaciones se eliminan automáticamente después de un mes",
|
||||||
"priority_min": "mín",
|
"priority_min": "mín",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Las notificaciones se eliminan automáticamente después de tres horas",
|
"prefs_notifications_delete_after_three_hours_description": "Las notificaciones se eliminan automáticamente después de tres horas",
|
||||||
"prefs_notifications_sound_description_none": "Las notificaciones no reproducen ningún sonido cuando llegan",
|
"prefs_notifications_sound_description_none": "Las notificaciones no reproducen ningún sonido cuando llegan",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Mostrar notificaciones si la prioridad es {{number}} ({{name}}) o superior",
|
"prefs_notifications_min_priority_description_x_or_higher": "Mostrar notificaciones si la prioridad es {{number}} ({{name}}) o superior",
|
||||||
"prefs_notifications_min_priority_description_max": "Mostrar notificaciones si la prioridad es 5 (máxima)",
|
"prefs_notifications_min_priority_description_max": "Mostrar notificaciones si la prioridad es 5 (máxima)",
|
||||||
"prefs_notifications_sound_description_some": "Las notificaciones reproducen el sonido {{sound}} cuando llegan",
|
"prefs_notifications_sound_description_some": "Las notificaciones reproducen el sonido {{sound}} cuando llegan",
|
||||||
"prefs_notifications_min_priority_description_any": "Mostrando todas las notificaciones, independientemente de su prioridad",
|
"prefs_notifications_min_priority_description_any": "Mostrando todas las notificaciones, independientemente de su prioridad",
|
||||||
"prefs_notifications_delete_after_never_description": "Las notificaciones nunca se borran automáticamente",
|
"prefs_notifications_delete_after_never_description": "Las notificaciones nunca se borran automáticamente",
|
||||||
"priority_default": "predeterminada",
|
"priority_default": "predeterminada",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Las notificaciones se eliminan automáticamente después de un día",
|
"prefs_notifications_delete_after_one_day_description": "Las notificaciones se eliminan automáticamente después de un día",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Las notificaciones se eliminan automáticamente después de una semana",
|
"prefs_notifications_delete_after_one_week_description": "Las notificaciones se eliminan automáticamente después de una semana",
|
||||||
"priority_low": "baja",
|
"priority_low": "baja",
|
||||||
"notifications_actions_not_supported": "Acción no soportada en la aplicación web",
|
"notifications_actions_not_supported": "Acción no soportada en la aplicación web",
|
||||||
"notifications_actions_http_request_title": "Enviar HTTP {{method}} a {{url}}",
|
"notifications_actions_http_request_title": "Enviar HTTP {{method}} a {{url}}",
|
||||||
"error_boundary_unsupported_indexeddb_description": "La aplicación web ntfy necesita IndexedDB para funcionar y su navegador no soporta IndexedDB en modo de navegación privada. <br/> <br/> Si bien esto es desafortunado, tampoco tiene mucho sentido usar la aplicación web ntfy en modo de navegación privada de todos modos, porque todo está almacenado en el almacenamiento del navegador. Puede leer más sobre esto <githubLink>en este issue de GitHub</githubLink>, o hablar con nosotros en <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_unsupported_indexeddb_description": "La aplicación web ntfy necesita IndexedDB para funcionar y su navegador no soporta IndexedDB en modo de navegación privada. <br/> <br/> Si bien esto es desafortunado, tampoco tiene mucho sentido usar la aplicación web ntfy en modo de navegación privada de todos modos, porque todo está almacenado en el almacenamiento del navegador. Puede leer más sobre esto <githubLink>en este issue de GitHub</githubLink>, o hablar con nosotros en <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink>.",
|
||||||
"action_bar_show_menu": "Mostrar menú",
|
"action_bar_show_menu": "Mostrar menú",
|
||||||
"action_bar_logo_alt": "logo de ntfy",
|
"action_bar_logo_alt": "logo de ntfy",
|
||||||
"action_bar_toggle_action_menu": "Abrir/cerrar el menú de acción",
|
"action_bar_toggle_action_menu": "Abrir/cerrar el menú de acción",
|
||||||
"message_bar_show_dialog": "Mostrar diálogo de publicación",
|
"message_bar_show_dialog": "Mostrar diálogo de publicación",
|
||||||
"message_bar_publish": "Publicar mensaje",
|
"message_bar_publish": "Publicar mensaje",
|
||||||
"nav_button_muted": "Notificaciones silenciadas",
|
"nav_button_muted": "Notificaciones silenciadas",
|
||||||
"nav_button_connecting": "conectando",
|
"nav_button_connecting": "conectando",
|
||||||
"notifications_list": "Lista de notificaciones",
|
"notifications_list": "Lista de notificaciones",
|
||||||
"notifications_list_item": "Notificación",
|
"notifications_list_item": "Notificación",
|
||||||
"notifications_mark_read": "Marcar como leído",
|
"notifications_mark_read": "Marcar como leído",
|
||||||
"notifications_delete": "Eliminar",
|
"notifications_delete": "Eliminar",
|
||||||
"notifications_priority_x": "Prioridad {{priority}}",
|
"notifications_priority_x": "Prioridad {{priority}}",
|
||||||
"notifications_new_indicator": "Nueva notificación",
|
"notifications_new_indicator": "Nueva notificación",
|
||||||
"notifications_attachment_image": "Imagen adjunta",
|
"notifications_attachment_image": "Imagen adjunta",
|
||||||
"notifications_attachment_file_image": "archivo de imagen",
|
"notifications_attachment_file_image": "archivo de imagen",
|
||||||
"notifications_attachment_file_video": "archivo de video",
|
"notifications_attachment_file_video": "archivo de video",
|
||||||
"notifications_attachment_file_audio": "archivo de audio",
|
"notifications_attachment_file_audio": "archivo de audio",
|
||||||
"notifications_attachment_file_app": "Archivo de aplicación de Android",
|
"notifications_attachment_file_app": "Archivo de aplicación de Android",
|
||||||
"notifications_attachment_file_document": "otro documento",
|
"notifications_attachment_file_document": "otro documento",
|
||||||
"action_bar_toggle_mute": "Silenciar/reactivar notificaciones",
|
"action_bar_toggle_mute": "Silenciar/reactivar notificaciones",
|
||||||
"publish_dialog_emoji_picker_show": "Elige un emoji",
|
"publish_dialog_emoji_picker_show": "Elige un emoji",
|
||||||
"publish_dialog_topic_reset": "Restablecer tópico",
|
"publish_dialog_topic_reset": "Restablecer tópico",
|
||||||
"publish_dialog_click_reset": "Eliminar URL de clic",
|
"publish_dialog_click_reset": "Eliminar URL de clic",
|
||||||
"publish_dialog_email_reset": "Eliminar el reenvío de correo electrónico",
|
"publish_dialog_email_reset": "Eliminar el reenvío de correo electrónico",
|
||||||
"publish_dialog_attach_reset": "Eliminar la URL del archivo adjunto",
|
"publish_dialog_attach_reset": "Eliminar la URL del archivo adjunto",
|
||||||
"publish_dialog_delay_reset": "Eliminar entrega retrasada",
|
"publish_dialog_delay_reset": "Eliminar entrega retrasada",
|
||||||
"publish_dialog_attached_file_remove": "Eliminar el archivo adjunto",
|
"publish_dialog_attached_file_remove": "Eliminar el archivo adjunto",
|
||||||
"emoji_picker_search_clear": "Limpiar búsqueda",
|
"emoji_picker_search_clear": "Limpiar búsqueda",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL del servicio",
|
"subscribe_dialog_subscribe_base_url_label": "URL del servicio",
|
||||||
"prefs_notifications_sound_play": "Reproducir el sonido seleccionado",
|
"prefs_notifications_sound_play": "Reproducir el sonido seleccionado",
|
||||||
"prefs_users_table": "Tabla de usuarios",
|
"prefs_users_table": "Tabla de usuarios",
|
||||||
"prefs_users_edit_button": "Editar usuario",
|
"prefs_users_edit_button": "Editar usuario",
|
||||||
"prefs_users_delete_button": "Eliminar usuario",
|
"prefs_users_delete_button": "Eliminar usuario",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Navegación privada no soportada"
|
"error_boundary_unsupported_indexeddb_title": "Navegación privada no soportada"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"nav_topics_title": "Sujets souscrits",
|
"nav_topics_title": "Sujets souscrits",
|
||||||
"action_bar_settings": "Paramètres",
|
"action_bar_settings": "Paramètres",
|
||||||
"action_bar_send_test_notification": "Envoyer une notification de test",
|
"action_bar_send_test_notification": "Envoyer une notification de test",
|
||||||
"action_bar_clear_notifications": "Effacer toutes les notifications",
|
"action_bar_clear_notifications": "Effacer toutes les notifications",
|
||||||
"action_bar_unsubscribe": "Se désabonner",
|
"action_bar_unsubscribe": "Se désabonner",
|
||||||
"message_bar_type_message": "Tapez un message ici",
|
"message_bar_type_message": "Tapez un message ici",
|
||||||
"notifications_attachment_open_button": "Ouvrir la pièce jointe",
|
"notifications_attachment_open_button": "Ouvrir la pièce jointe",
|
||||||
"notifications_attachment_link_expires": "le lien expire {{date}}",
|
"notifications_attachment_link_expires": "le lien expire {{date}}",
|
||||||
"message_bar_error_publishing": "Notification d'erreur de publication",
|
"message_bar_error_publishing": "Notification d'erreur de publication",
|
||||||
"nav_button_all_notifications": "Toutes les notifications",
|
"nav_button_all_notifications": "Toutes les notifications",
|
||||||
"nav_button_settings": "Paramètres",
|
"nav_button_settings": "Paramètres",
|
||||||
"nav_button_documentation": "Documentation",
|
"nav_button_documentation": "Documentation",
|
||||||
"alert_not_supported_description": "Les notifications ne sont pas prises en charge par votre navigateur.",
|
"alert_not_supported_description": "Les notifications ne sont pas prises en charge par votre navigateur.",
|
||||||
"notifications_attachment_copy_url_title": "Copier l'URL de la pièce jointe dans le presse-papiers",
|
"notifications_attachment_copy_url_title": "Copier l'URL de la pièce jointe dans le presse-papiers",
|
||||||
"notifications_attachment_open_title": "Aller à {{url}}",
|
"notifications_attachment_open_title": "Aller à {{url}}",
|
||||||
"notifications_attachment_link_expired": "lien de téléchargement expiré",
|
"notifications_attachment_link_expired": "lien de téléchargement expiré",
|
||||||
"nav_button_publish_message": "Publier la notification",
|
"nav_button_publish_message": "Publier la notification",
|
||||||
"notifications_copied_to_clipboard": "Copié dans le presse-papiers",
|
"notifications_copied_to_clipboard": "Copié dans le presse-papiers",
|
||||||
"alert_not_supported_title": "Notifications non prises en charge",
|
"alert_not_supported_title": "Notifications non prises en charge",
|
||||||
"notifications_tags": "Étiquettes",
|
"notifications_tags": "Étiquettes",
|
||||||
"notifications_attachment_copy_url_button": "Copier l'URL",
|
"notifications_attachment_copy_url_button": "Copier l'URL",
|
||||||
"notifications_click_copy_url_title": "Copier l'URL du lien dans le presse-papiers",
|
"notifications_click_copy_url_title": "Copier l'URL du lien dans le presse-papiers",
|
||||||
"notifications_click_copy_url_button": "Copier le lien",
|
"notifications_click_copy_url_button": "Copier le lien",
|
||||||
"notifications_click_open_button": "Ouvrir le lien",
|
"notifications_click_open_button": "Ouvrir le lien",
|
||||||
"notifications_none_for_topic_title": "Vous n'avez pas encore reçu de notifications pour ce sujet.",
|
"notifications_none_for_topic_title": "Vous n'avez pas encore reçu de notifications pour ce sujet.",
|
||||||
"notifications_actions_open_url_title": "Aller à {{url}}",
|
"notifications_actions_open_url_title": "Aller à {{url}}",
|
||||||
"notifications_example": "Exemple",
|
"notifications_example": "Exemple",
|
||||||
"notifications_loading": "Chargement des notifications…",
|
"notifications_loading": "Chargement des notifications…",
|
||||||
"publish_dialog_progress_uploading": "Téléversement…",
|
"publish_dialog_progress_uploading": "Téléversement…",
|
||||||
"publish_dialog_priority_min": "Priorité minimum",
|
"publish_dialog_priority_min": "Priorité minimum",
|
||||||
"publish_dialog_priority_low": "Basse priorité",
|
"publish_dialog_priority_low": "Basse priorité",
|
||||||
"publish_dialog_priority_default": "Priorité par défaut",
|
"publish_dialog_priority_default": "Priorité par défaut",
|
||||||
"publish_dialog_base_url_label": "URL du service",
|
"publish_dialog_base_url_label": "URL du service",
|
||||||
"publish_dialog_base_url_placeholder": "URL du service, par ex. https://exemple.com",
|
"publish_dialog_base_url_placeholder": "URL du service, par ex. https://exemple.com",
|
||||||
"publish_dialog_title_label": "Titre",
|
"publish_dialog_title_label": "Titre",
|
||||||
"publish_dialog_message_label": "Message",
|
"publish_dialog_message_label": "Message",
|
||||||
"publish_dialog_topic_label": "Nom du sujet",
|
"publish_dialog_topic_label": "Nom du sujet",
|
||||||
"publish_dialog_message_placeholder": "Tapez un message ici",
|
"publish_dialog_message_placeholder": "Tapez un message ici",
|
||||||
"publish_dialog_tags_label": "Étiquettes",
|
"publish_dialog_tags_label": "Étiquettes",
|
||||||
"publish_dialog_email_label": "Courriel",
|
"publish_dialog_email_label": "Courriel",
|
||||||
"publish_dialog_email_placeholder": "Adresse à laquelle transmettre la notification, par exemple phil@exemple.com",
|
"publish_dialog_email_placeholder": "Adresse à laquelle transmettre la notification, par exemple phil@exemple.com",
|
||||||
"publish_dialog_chip_email_label": "Transférer vers le courriel",
|
"publish_dialog_chip_email_label": "Transférer vers le courriel",
|
||||||
"notifications_no_subscriptions_title": "Il semble que vous n’ayez pas encore d’abonnements.",
|
"notifications_no_subscriptions_title": "Il semble que vous n’ayez pas encore d’abonnements.",
|
||||||
"publish_dialog_progress_uploading_detail": "Téléversement {{loaded}}/{{total}} ({{percent}} %) …",
|
"publish_dialog_progress_uploading_detail": "Téléversement {{loaded}}/{{total}} ({{percent}} %) …",
|
||||||
"publish_dialog_message_published": "Notification publiée",
|
"publish_dialog_message_published": "Notification publiée",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "dépasse la limite et le quota du fichier {{fileSizeLimit}}, {{remainingBytes}} restant",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "dépasse la limite et le quota du fichier {{fileSizeLimit}}, {{remainingBytes}} restant",
|
||||||
"publish_dialog_priority_high": "Haute priorité",
|
"publish_dialog_priority_high": "Haute priorité",
|
||||||
"publish_dialog_priority_max": "Priorité maximum",
|
"publish_dialog_priority_max": "Priorité maximum",
|
||||||
"publish_dialog_attachment_limits_file_reached": "Dépasse la limite du fichier {{fileSizeLimit}}",
|
"publish_dialog_attachment_limits_file_reached": "Dépasse la limite du fichier {{fileSizeLimit}}",
|
||||||
"nav_button_subscribe": "S'abonner au sujet",
|
"nav_button_subscribe": "S'abonner au sujet",
|
||||||
"notifications_no_subscriptions_description": "Cliquez sur le lien « {{linktext}} » pour créer ou vous abonner à un sujet. Après cela, vous pouvez envoyer des messages via PUT ou POST et vous recevrez des notifications ici.",
|
"notifications_no_subscriptions_description": "Cliquez sur le lien « {{linktext}} » pour créer ou vous abonner à un sujet. Après cela, vous pouvez envoyer des messages via PUT ou POST et vous recevrez des notifications ici.",
|
||||||
"alert_grant_title": "Les notifications sont désactivées",
|
"alert_grant_title": "Les notifications sont désactivées",
|
||||||
"alert_grant_description": "Autorisez votre navigateur à afficher les notifications du bureau.",
|
"alert_grant_description": "Autorisez votre navigateur à afficher les notifications du bureau.",
|
||||||
"alert_grant_button": "Accorder maintenant",
|
"alert_grant_button": "Accorder maintenant",
|
||||||
"notifications_none_for_any_title": "Vous n'avez reçu aucune notification.",
|
"notifications_none_for_any_title": "Vous n'avez reçu aucune notification.",
|
||||||
"publish_dialog_title_topic": "Publier vers {{topic}}",
|
"publish_dialog_title_topic": "Publier vers {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Publier la notification",
|
"publish_dialog_title_no_topic": "Publier la notification",
|
||||||
"notifications_more_details": "Pour plus d'information, visitez <websiteLink>le site web</websiteLink> ou <docsLink>la documentation</docsLink>.",
|
"notifications_more_details": "Pour plus d'information, visitez <websiteLink>le site web</websiteLink> ou <docsLink>la documentation</docsLink>.",
|
||||||
"publish_dialog_title_placeholder": "Titre de la notification, par ex. Alerte d'espace disque",
|
"publish_dialog_title_placeholder": "Titre de la notification, par ex. Alerte d'espace disque",
|
||||||
"publish_dialog_topic_placeholder": "Nom du sujet, par ex. phil_alerts",
|
"publish_dialog_topic_placeholder": "Nom du sujet, par ex. phil_alerts",
|
||||||
"publish_dialog_delay_placeholder": "Délai de réception, par ex. {{unixTimestamp}}, {{relativeTime}}, ou « {{naturalLanguage}} » (en anglais seulement)",
|
"publish_dialog_delay_placeholder": "Délai de réception, par ex. {{unixTimestamp}}, {{relativeTime}}, ou « {{naturalLanguage}} » (en anglais seulement)",
|
||||||
"publish_dialog_other_features": "Autres fonctionnalités :",
|
"publish_dialog_other_features": "Autres fonctionnalités :",
|
||||||
"notifications_actions_not_supported": "Cette action n'est pas supportée dans l'application web",
|
"notifications_actions_not_supported": "Cette action n'est pas supportée dans l'application web",
|
||||||
"notifications_actions_http_request_title": "Envoyer une requête HTTP {{method}} à {{url}}",
|
"notifications_actions_http_request_title": "Envoyer une requête HTTP {{method}} à {{url}}",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "quota dépassé, {{remainingBytes}} restants",
|
"publish_dialog_attachment_limits_quota_reached": "quota dépassé, {{remainingBytes}} restants",
|
||||||
"publish_dialog_tags_placeholder": "Liste séparée par des virgules d'étiquettes, par ex. avertissement,backup-srv1",
|
"publish_dialog_tags_placeholder": "Liste séparée par des virgules d'étiquettes, par ex. avertissement,backup-srv1",
|
||||||
"publish_dialog_priority_label": "Priorité",
|
"publish_dialog_priority_label": "Priorité",
|
||||||
"publish_dialog_click_label": "URL du clic",
|
"publish_dialog_click_label": "URL du clic",
|
||||||
"publish_dialog_click_placeholder": "URL ouverte lors d'un clic sur la notification",
|
"publish_dialog_click_placeholder": "URL ouverte lors d'un clic sur la notification",
|
||||||
"publish_dialog_attach_label": "URL de la pièce jointe",
|
"publish_dialog_attach_label": "URL de la pièce jointe",
|
||||||
"publish_dialog_attach_placeholder": "Attachez un fichier par une URL, par ex. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Attachez un fichier par une URL, par ex. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_filename_label": "Nom du fichier",
|
"publish_dialog_filename_label": "Nom du fichier",
|
||||||
"notifications_none_for_topic_description": "Pour envoyer des notifications à ce sujet, faites simplement une requête PUT ou POST à l'URL du sujet.",
|
"notifications_none_for_topic_description": "Pour envoyer des notifications à ce sujet, faites simplement une requête PUT ou POST à l'URL du sujet.",
|
||||||
"notifications_none_for_any_description": "Pour envoyer des notifications à un sujet, faites simplement une requête PUT ou POST à l'URL du sujet. Voici un exemple utilisant un de vos sujets.",
|
"notifications_none_for_any_description": "Pour envoyer des notifications à un sujet, faites simplement une requête PUT ou POST à l'URL du sujet. Voici un exemple utilisant un de vos sujets.",
|
||||||
"publish_dialog_filename_placeholder": "Nom du fichier joint",
|
"publish_dialog_filename_placeholder": "Nom du fichier joint",
|
||||||
"publish_dialog_delay_label": "Délai",
|
"publish_dialog_delay_label": "Délai",
|
||||||
"publish_dialog_chip_click_label": "Cliquez sur l'URL",
|
"publish_dialog_chip_click_label": "Cliquez sur l'URL",
|
||||||
"subscribe_dialog_subscribe_title": "S'abonner au sujet",
|
"subscribe_dialog_subscribe_title": "S'abonner au sujet",
|
||||||
"subscribe_dialog_login_title": "Connexion nécessaire",
|
"subscribe_dialog_login_title": "Connexion nécessaire",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Priorité basse et au-dessus",
|
"prefs_notifications_min_priority_low_and_higher": "Priorité basse et au-dessus",
|
||||||
"prefs_users_dialog_button_cancel": "Annuler",
|
"prefs_users_dialog_button_cancel": "Annuler",
|
||||||
"error_boundary_button_copy_stack_trace": "Copier la stack strace",
|
"error_boundary_button_copy_stack_trace": "Copier la stack strace",
|
||||||
"publish_dialog_attached_file_title": "Fichier joint :",
|
"publish_dialog_attached_file_title": "Fichier joint :",
|
||||||
"publish_dialog_checkbox_publish_another": "Publier un autre",
|
"publish_dialog_checkbox_publish_another": "Publier un autre",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Nom du fichier joint",
|
"publish_dialog_attached_file_filename_placeholder": "Nom du fichier joint",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Utiliser un autre serveur",
|
"subscribe_dialog_subscribe_use_another_label": "Utiliser un autre serveur",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Annuler",
|
"subscribe_dialog_subscribe_button_cancel": "Annuler",
|
||||||
"prefs_notifications_sound_description_none": "Les notifications ne font aucun son quand elles arrivent",
|
"prefs_notifications_sound_description_none": "Les notifications ne font aucun son quand elles arrivent",
|
||||||
"prefs_notifications_sound_description_some": "Les notifications jouent le son {{sound}} quand elles arrivent",
|
"prefs_notifications_sound_description_some": "Les notifications jouent le son {{sound}} quand elles arrivent",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Montrer les notifications si leur priorité est {{number}} ({{name}}) ou plus",
|
"prefs_notifications_min_priority_description_x_or_higher": "Montrer les notifications si leur priorité est {{number}} ({{name}}) ou plus",
|
||||||
"publish_dialog_button_cancel": "Annuler",
|
"publish_dialog_button_cancel": "Annuler",
|
||||||
"publish_dialog_button_send": "Envoyer",
|
"publish_dialog_button_send": "Envoyer",
|
||||||
"publish_dialog_drop_file_here": "Déposez un fichier ici",
|
"publish_dialog_drop_file_here": "Déposez un fichier ici",
|
||||||
"emoji_picker_search_placeholder": "Chercher un émoji",
|
"emoji_picker_search_placeholder": "Chercher un émoji",
|
||||||
"subscribe_dialog_subscribe_description": "Le sujet n'est peut-être pas protégé par un mot de passe, choisissez un nom de sujet difficile à deviner. Une fois abonné, vous pouvez PUT/POST des notifications.",
|
"subscribe_dialog_subscribe_description": "Le sujet n'est peut-être pas protégé par un mot de passe, choisissez un nom de sujet difficile à deviner. Une fois abonné, vous pouvez PUT/POST des notifications.",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Nom de sujet, par ex. alertes_de_phil",
|
"subscribe_dialog_subscribe_topic_placeholder": "Nom de sujet, par ex. alertes_de_phil",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "S'abonner",
|
"subscribe_dialog_subscribe_button_subscribe": "S'abonner",
|
||||||
"subscribe_dialog_login_description": "Ce sujet est protégé par un mot de passe. Veuillez entrer le nom d'utilisateur et le mot de passe pour vous abonner.",
|
"subscribe_dialog_login_description": "Ce sujet est protégé par un mot de passe. Veuillez entrer le nom d'utilisateur et le mot de passe pour vous abonner.",
|
||||||
"subscribe_dialog_login_username_label": "Nom d'utilisateur, par ex. phil",
|
"subscribe_dialog_login_username_label": "Nom d'utilisateur, par ex. phil",
|
||||||
"subscribe_dialog_login_button_login": "Connexion",
|
"subscribe_dialog_login_button_login": "Connexion",
|
||||||
"prefs_notifications_sound_title": "Son de notification",
|
"prefs_notifications_sound_title": "Son de notification",
|
||||||
"prefs_notifications_delete_after_never": "Jamais",
|
"prefs_notifications_delete_after_never": "Jamais",
|
||||||
"prefs_users_table_base_url_header": "URL de service",
|
"prefs_users_table_base_url_header": "URL de service",
|
||||||
"subscribe_dialog_login_password_label": "Mot de passe",
|
"subscribe_dialog_login_password_label": "Mot de passe",
|
||||||
"prefs_notifications_title": "Notifications",
|
"prefs_notifications_title": "Notifications",
|
||||||
"prefs_notifications_delete_after_title": "Supprimer les notifications",
|
"prefs_notifications_delete_after_title": "Supprimer les notifications",
|
||||||
"prefs_users_add_button": "Ajouter un utilisateur",
|
"prefs_users_add_button": "Ajouter un utilisateur",
|
||||||
"subscribe_dialog_login_button_back": "Retour",
|
"subscribe_dialog_login_button_back": "Retour",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonyme",
|
"subscribe_dialog_error_user_anonymous": "anonyme",
|
||||||
"prefs_notifications_sound_no_sound": "Aucun son",
|
"prefs_notifications_sound_no_sound": "Aucun son",
|
||||||
"prefs_notifications_min_priority_title": "Priorité minimum",
|
"prefs_notifications_min_priority_title": "Priorité minimum",
|
||||||
"prefs_notifications_min_priority_description_any": "Montrer toutes les notifications, quelque soit leur priorité",
|
"prefs_notifications_min_priority_description_any": "Montrer toutes les notifications, quelque soit leur priorité",
|
||||||
"prefs_notifications_min_priority_description_max": "Montrer les notifications si la priorité est 5 (max)",
|
"prefs_notifications_min_priority_description_max": "Montrer les notifications si la priorité est 5 (max)",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Priorité par défaut et au-dessus",
|
"prefs_notifications_min_priority_default_and_higher": "Priorité par défaut et au-dessus",
|
||||||
"prefs_notifications_min_priority_max_only": "Seulement la priorité maximale",
|
"prefs_notifications_min_priority_max_only": "Seulement la priorité maximale",
|
||||||
"prefs_notifications_delete_after_three_hours": "Après trois heures",
|
"prefs_notifications_delete_after_three_hours": "Après trois heures",
|
||||||
"prefs_notifications_delete_after_one_day": "Après un jour",
|
"prefs_notifications_delete_after_one_day": "Après un jour",
|
||||||
"subscribe_dialog_error_user_not_authorized": "L'utilisateur {{username}} n'est pas autorisé",
|
"subscribe_dialog_error_user_not_authorized": "L'utilisateur {{username}} n'est pas autorisé",
|
||||||
"prefs_notifications_min_priority_any": "N'importe quelle priorité",
|
"prefs_notifications_min_priority_any": "N'importe quelle priorité",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Priorité haute et au-dessus",
|
"prefs_notifications_min_priority_high_and_higher": "Priorité haute et au-dessus",
|
||||||
"prefs_users_dialog_base_url_label": "URL du service, par ex. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL du service, par ex. https://ntfy.sh",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Les notifications sont supprimées automatiquement après une semaine",
|
"prefs_notifications_delete_after_one_week_description": "Les notifications sont supprimées automatiquement après une semaine",
|
||||||
"prefs_users_dialog_username_label": "Nom d'utilisateur, par ex. phil",
|
"prefs_users_dialog_username_label": "Nom d'utilisateur, par ex. phil",
|
||||||
"prefs_users_dialog_password_label": "Mot de passe",
|
"prefs_users_dialog_password_label": "Mot de passe",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Les notifications sont supprimées automatiquement après un mois",
|
"prefs_notifications_delete_after_one_month_description": "Les notifications sont supprimées automatiquement après un mois",
|
||||||
"prefs_users_title": "Gérer les utilisateurs",
|
"prefs_users_title": "Gérer les utilisateurs",
|
||||||
"prefs_users_description": "Ajoutez/supprimez des utilisateurs pour vos sujets protégés ici. Notez que cet utilisateur et ce mot de passe sont stockés dans le stockage local du navigateur.",
|
"prefs_users_description": "Ajoutez/supprimez des utilisateurs pour vos sujets protégés ici. Notez que cet utilisateur et ce mot de passe sont stockés dans le stockage local du navigateur.",
|
||||||
"prefs_users_table_user_header": "Utilisateur",
|
"prefs_users_table_user_header": "Utilisateur",
|
||||||
"prefs_users_dialog_title_edit": "Éditer l'utilisateur",
|
"prefs_users_dialog_title_edit": "Éditer l'utilisateur",
|
||||||
"prefs_users_dialog_button_add": "Ajouter",
|
"prefs_users_dialog_button_add": "Ajouter",
|
||||||
"error_boundary_description": "Ceci ne devrait évidemment pas arriver. Désolé pour ça.<br/>Si vous avez une minute, merci de <githubLink>signaler ceci sur GitHub</githubLink>, ou faites-le nous savoir par <discordLink>Discord</discordLink> ou <matrixLink>Matric</matrixLink>.",
|
"error_boundary_description": "Ceci ne devrait évidemment pas arriver. Désolé pour ça.<br/>Si vous avez une minute, merci de <githubLink>signaler ceci sur GitHub</githubLink>, ou faites-le nous savoir par <discordLink>Discord</discordLink> ou <matrixLink>Matric</matrixLink>.",
|
||||||
"prefs_users_dialog_title_add": "Ajouter un utilisateur",
|
"prefs_users_dialog_title_add": "Ajouter un utilisateur",
|
||||||
"error_boundary_stack_trace": "Trace de pile d'appels",
|
"error_boundary_stack_trace": "Trace de pile d'appels",
|
||||||
"error_boundary_gathering_info": "Récupérer plus d'information…",
|
"error_boundary_gathering_info": "Récupérer plus d'information…",
|
||||||
"prefs_notifications_delete_after_one_week": "Après une semaine",
|
"prefs_notifications_delete_after_one_week": "Après une semaine",
|
||||||
"prefs_notifications_delete_after_one_month": "Après un mois",
|
"prefs_notifications_delete_after_one_month": "Après un mois",
|
||||||
"prefs_notifications_delete_after_never_description": "Les notifications ne sont jamais supprimées automatiquement",
|
"prefs_notifications_delete_after_never_description": "Les notifications ne sont jamais supprimées automatiquement",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Les notifications sont supprimées automatiquement après trois heures",
|
"prefs_notifications_delete_after_three_hours_description": "Les notifications sont supprimées automatiquement après trois heures",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Les notifications sont supprimées automatiquement après un jour",
|
"prefs_notifications_delete_after_one_day_description": "Les notifications sont supprimées automatiquement après un jour",
|
||||||
"prefs_appearance_title": "Apparence",
|
"prefs_appearance_title": "Apparence",
|
||||||
"prefs_appearance_language_title": "Langue",
|
"prefs_appearance_language_title": "Langue",
|
||||||
"priority_min": "min",
|
"priority_min": "min",
|
||||||
"priority_low": "basse",
|
"priority_low": "basse",
|
||||||
"priority_default": "défault",
|
"priority_default": "défault",
|
||||||
"priority_high": "haute",
|
"priority_high": "haute",
|
||||||
"priority_max": "max",
|
"priority_max": "max",
|
||||||
"error_boundary_title": "Oh non, ntfy a planté",
|
"error_boundary_title": "Oh non, ntfy a planté",
|
||||||
"publish_dialog_chip_attach_url_label": "Joindre un fichier par URL",
|
"publish_dialog_chip_attach_url_label": "Joindre un fichier par URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Joindre un fichier local",
|
"publish_dialog_chip_attach_file_label": "Joindre un fichier local",
|
||||||
"publish_dialog_chip_delay_label": "Délayer l'envoi",
|
"publish_dialog_chip_delay_label": "Délayer l'envoi",
|
||||||
"publish_dialog_chip_topic_label": "Changer de sujet",
|
"publish_dialog_chip_topic_label": "Changer de sujet",
|
||||||
"publish_dialog_details_examples_description": "Pour des exemples et une description détaillée des fonctionnalités d'envoi, voir la <docsLink>documentation</docsLink>.",
|
"publish_dialog_details_examples_description": "Pour des exemples et une description détaillée des fonctionnalités d'envoi, voir la <docsLink>documentation</docsLink>.",
|
||||||
"publish_dialog_button_cancel_sending": "Annuler l'envoi",
|
"publish_dialog_button_cancel_sending": "Annuler l'envoi",
|
||||||
"prefs_users_dialog_button_save": "Enregistrer",
|
"prefs_users_dialog_button_save": "Enregistrer",
|
||||||
"notifications_new_indicator": "Nouvelle notification",
|
"notifications_new_indicator": "Nouvelle notification",
|
||||||
"publish_dialog_delay_reset": "Retirer le délai de réception",
|
"publish_dialog_delay_reset": "Retirer le délai de réception",
|
||||||
"notifications_list_item": "Notification",
|
"notifications_list_item": "Notification",
|
||||||
"notifications_priority_x": "Priorité {{priority}}",
|
"notifications_priority_x": "Priorité {{priority}}",
|
||||||
"notifications_mark_read": "Marquer comme lu",
|
"notifications_mark_read": "Marquer comme lu",
|
||||||
"notifications_attachment_image": "Image jointe",
|
"notifications_attachment_image": "Image jointe",
|
||||||
"notifications_delete": "Supprimer",
|
"notifications_delete": "Supprimer",
|
||||||
"notifications_attachment_file_video": "fichier vidéo",
|
"notifications_attachment_file_video": "fichier vidéo",
|
||||||
"notifications_attachment_file_audio": "fichier audio",
|
"notifications_attachment_file_audio": "fichier audio",
|
||||||
"prefs_users_table": "Liste des utilisateurs",
|
"prefs_users_table": "Liste des utilisateurs",
|
||||||
"notifications_attachment_file_image": "fichier image",
|
"notifications_attachment_file_image": "fichier image",
|
||||||
"notifications_attachment_file_app": "fichier d'application Android",
|
"notifications_attachment_file_app": "fichier d'application Android",
|
||||||
"notifications_attachment_file_document": "autre document",
|
"notifications_attachment_file_document": "autre document",
|
||||||
"prefs_notifications_sound_play": "Jouer le son sélectionné",
|
"prefs_notifications_sound_play": "Jouer le son sélectionné",
|
||||||
"error_boundary_unsupported_indexeddb_description": "L'application web ntfy a besoin d'IndexedDB pour fonctionner, mais votre navigateur ne supporte pas IndexedDB en navigation privée.<br/><br/>Bien que cela soit regrettable, il serait peu utile d'utiliser l'application web ntfy en navigation privée, car tout est stocké par votre navigateur. Vous pouvez vous renseigner plus amplement à ce propos <githubLink>dans ce ticket GitHub</githubLink>, ou en parler avec nous sur <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_unsupported_indexeddb_description": "L'application web ntfy a besoin d'IndexedDB pour fonctionner, mais votre navigateur ne supporte pas IndexedDB en navigation privée.<br/><br/>Bien que cela soit regrettable, il serait peu utile d'utiliser l'application web ntfy en navigation privée, car tout est stocké par votre navigateur. Vous pouvez vous renseigner plus amplement à ce propos <githubLink>dans ce ticket GitHub</githubLink>, ou en parler avec nous sur <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>.",
|
||||||
"action_bar_show_menu": "Montrer le menu",
|
"action_bar_show_menu": "Montrer le menu",
|
||||||
"action_bar_toggle_mute": "Mettre en sourdine/réactiver les notifications",
|
"action_bar_toggle_mute": "Mettre en sourdine/réactiver les notifications",
|
||||||
"action_bar_toggle_action_menu": "Ouvrir/fermer le menu d'actions",
|
"action_bar_toggle_action_menu": "Ouvrir/fermer le menu d'actions",
|
||||||
"publish_dialog_emoji_picker_show": "Choisir un emoji",
|
"publish_dialog_emoji_picker_show": "Choisir un emoji",
|
||||||
"publish_dialog_topic_reset": "Réinitialiser le sujet",
|
"publish_dialog_topic_reset": "Réinitialiser le sujet",
|
||||||
"message_bar_publish": "Publier le message",
|
"message_bar_publish": "Publier le message",
|
||||||
"nav_button_muted": "Notifications en sourdine",
|
"nav_button_muted": "Notifications en sourdine",
|
||||||
"nav_button_connecting": "connexion en cours",
|
"nav_button_connecting": "connexion en cours",
|
||||||
"notifications_list": "Liste des notifications",
|
"notifications_list": "Liste des notifications",
|
||||||
"message_bar_show_dialog": "Montrer le formulaire de publication",
|
"message_bar_show_dialog": "Montrer le formulaire de publication",
|
||||||
"action_bar_logo_alt": "Logo de ntfy",
|
"action_bar_logo_alt": "Logo de ntfy",
|
||||||
"publish_dialog_click_reset": "Retirer l'URL du clic",
|
"publish_dialog_click_reset": "Retirer l'URL du clic",
|
||||||
"publish_dialog_email_reset": "Retirer le transfert par courriel",
|
"publish_dialog_email_reset": "Retirer le transfert par courriel",
|
||||||
"publish_dialog_attach_reset": "Retirer l'URL de la pièce jointe",
|
"publish_dialog_attach_reset": "Retirer l'URL de la pièce jointe",
|
||||||
"emoji_picker_search_clear": "Effacer la recherche",
|
"emoji_picker_search_clear": "Effacer la recherche",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL du service",
|
"subscribe_dialog_subscribe_base_url_label": "URL du service",
|
||||||
"prefs_users_edit_button": "Éditer l'utilisateur",
|
"prefs_users_edit_button": "Éditer l'utilisateur",
|
||||||
"prefs_users_delete_button": "Supprimer l'utilisateur",
|
"prefs_users_delete_button": "Supprimer l'utilisateur",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Navigation privée non prise en charge",
|
"error_boundary_unsupported_indexeddb_title": "Navigation privée non prise en charge",
|
||||||
"publish_dialog_attached_file_remove": "Retirer le fichier joint"
|
"publish_dialog_attached_file_remove": "Retirer le fichier joint"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_send_test_notification": "Teszt értesítés küldése",
|
"action_bar_send_test_notification": "Teszt értesítés küldése",
|
||||||
"action_bar_clear_notifications": "Összes értesítés törlése",
|
"action_bar_clear_notifications": "Összes értesítés törlése",
|
||||||
"alert_not_supported_description": "A böngésző nem támogatja az értesítések fogadását.",
|
"alert_not_supported_description": "A böngésző nem támogatja az értesítések fogadását.",
|
||||||
"action_bar_settings": "Beállítások",
|
"action_bar_settings": "Beállítások",
|
||||||
"action_bar_unsubscribe": "Leiratkozás",
|
"action_bar_unsubscribe": "Leiratkozás",
|
||||||
"message_bar_type_message": "Írd ide az üzenetet",
|
"message_bar_type_message": "Írd ide az üzenetet",
|
||||||
"message_bar_error_publishing": "Hiba történt az értesítés elküldése közben",
|
"message_bar_error_publishing": "Hiba történt az értesítés elküldése közben",
|
||||||
"nav_button_all_notifications": "Összes értesítés",
|
"nav_button_all_notifications": "Összes értesítés",
|
||||||
"nav_topics_title": "Feliratkozott témák",
|
"nav_topics_title": "Feliratkozott témák",
|
||||||
"alert_grant_title": "Az értesítések le vannak tiltva",
|
"alert_grant_title": "Az értesítések le vannak tiltva",
|
||||||
"alert_grant_description": "Engedélyezd a böngészőnek, hogy asztali értesítéseket jeleníttessen meg.",
|
"alert_grant_description": "Engedélyezd a böngészőnek, hogy asztali értesítéseket jeleníttessen meg.",
|
||||||
"nav_button_settings": "Beállítások",
|
"nav_button_settings": "Beállítások",
|
||||||
"nav_button_documentation": "Dokumentáció",
|
"nav_button_documentation": "Dokumentáció",
|
||||||
"nav_button_publish_message": "Értesítés küldése",
|
"nav_button_publish_message": "Értesítés küldése",
|
||||||
"alert_grant_button": "Engedélyezés",
|
"alert_grant_button": "Engedélyezés",
|
||||||
"alert_not_supported_title": "Nem támogatott funkció",
|
"alert_not_supported_title": "Nem támogatott funkció",
|
||||||
"notifications_copied_to_clipboard": "Másolva a vágólapra",
|
"notifications_copied_to_clipboard": "Másolva a vágólapra",
|
||||||
"notifications_tags": "Címkék",
|
"notifications_tags": "Címkék",
|
||||||
"notifications_attachment_copy_url_title": "Másolja vágólapra a csatolmány URL-ét",
|
"notifications_attachment_copy_url_title": "Másolja vágólapra a csatolmány URL-ét",
|
||||||
"notifications_attachment_copy_url_button": "URL másolása",
|
"notifications_attachment_copy_url_button": "URL másolása",
|
||||||
"notifications_attachment_open_title": "Menjen a(z) {{url}} címre",
|
"notifications_attachment_open_title": "Menjen a(z) {{url}} címre",
|
||||||
"notifications_attachment_open_button": "Csatolmány megnyitása",
|
"notifications_attachment_open_button": "Csatolmány megnyitása",
|
||||||
"notifications_attachment_link_expired": "A letöltési hivatkozás lejárt",
|
"notifications_attachment_link_expired": "A letöltési hivatkozás lejárt",
|
||||||
"notifications_attachment_link_expires": "A hivatkozás {{date}}-kor jár le",
|
"notifications_attachment_link_expires": "A hivatkozás {{date}}-kor jár le",
|
||||||
"nav_button_subscribe": "Feliratkozás témára",
|
"nav_button_subscribe": "Feliratkozás témára",
|
||||||
"notifications_click_copy_url_title": "Másolja vágólapra a hivatkozás URL-ét",
|
"notifications_click_copy_url_title": "Másolja vágólapra a hivatkozás URL-ét",
|
||||||
"notifications_actions_open_url_title": "Menjen a(z) {{url}} címre",
|
"notifications_actions_open_url_title": "Menjen a(z) {{url}} címre",
|
||||||
"notifications_actions_not_supported": "A művelet nem támogatott a webes alkalmazásban",
|
"notifications_actions_not_supported": "A művelet nem támogatott a webes alkalmazásban",
|
||||||
"notifications_actions_http_request_title": "Küldjön HTTP {{method}} kérést a(z) {{url}} címre",
|
"notifications_actions_http_request_title": "Küldjön HTTP {{method}} kérést a(z) {{url}} címre",
|
||||||
"notifications_none_for_topic_title": "Még nem érkezett értesítés erre a témára.",
|
"notifications_none_for_topic_title": "Még nem érkezett értesítés erre a témára.",
|
||||||
"notifications_none_for_any_title": "Még nem érkezett egy értesítés sem.",
|
"notifications_none_for_any_title": "Még nem érkezett egy értesítés sem.",
|
||||||
"notifications_none_for_any_description": "Értesítés beküldéséhez csak küldj egy PUT, vagy POST kérést a téma URL-ére. Itt egy példa az egyik témádhoz.",
|
"notifications_none_for_any_description": "Értesítés beküldéséhez csak küldj egy PUT, vagy POST kérést a téma URL-ére. Itt egy példa az egyik témádhoz.",
|
||||||
"notifications_no_subscriptions_title": "Úgy tűnik, még nem iratkoztál fel egy témára sem.",
|
"notifications_no_subscriptions_title": "Úgy tűnik, még nem iratkoztál fel egy témára sem.",
|
||||||
"publish_dialog_message_published": "Értesítés elküldve",
|
"publish_dialog_message_published": "Értesítés elküldve",
|
||||||
"notifications_example": "Példa",
|
"notifications_example": "Példa",
|
||||||
"notifications_no_subscriptions_description": "Kattints a \"{{linktext}}\" linkre egy téma létrehozásához, vagy rá feliratkozáshoz. Ezután PUT, vagy POST kéréssel fogsz tudni értesítéseket küldeni rá, amik utána meg fognak itt jelenni.",
|
"notifications_no_subscriptions_description": "Kattints a \"{{linktext}}\" linkre egy téma létrehozásához, vagy rá feliratkozáshoz. Ezután PUT, vagy POST kéréssel fogsz tudni értesítéseket küldeni rá, amik utána meg fognak itt jelenni.",
|
||||||
"publish_dialog_priority_low": "Alacsony prioritás",
|
"publish_dialog_priority_low": "Alacsony prioritás",
|
||||||
"publish_dialog_priority_default": "Közepes prioritás",
|
"publish_dialog_priority_default": "Közepes prioritás",
|
||||||
"publish_dialog_priority_high": "Magas prioritás",
|
"publish_dialog_priority_high": "Magas prioritás",
|
||||||
"notifications_more_details": "További információkért keresd fel a <websiteLink>weboldalunkat</websiteLink> vagy olvasd el a <docsLink>dokumentációt</docsLink>.",
|
"notifications_more_details": "További információkért keresd fel a <websiteLink>weboldalunkat</websiteLink> vagy olvasd el a <docsLink>dokumentációt</docsLink>.",
|
||||||
"publish_dialog_title_no_topic": "Értesítés küldése",
|
"publish_dialog_title_no_topic": "Értesítés küldése",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "túllépi a fájlméret korlátot ({{fileSizeLimit}}) és a kvótát is ({{remainingBytes}} maradt)",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "túllépi a fájlméret korlátot ({{fileSizeLimit}}) és a kvótát is ({{remainingBytes}} maradt)",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "túllépi a kvótát, {{remainingBytes}} maradt",
|
"publish_dialog_attachment_limits_quota_reached": "túllépi a kvótát, {{remainingBytes}} maradt",
|
||||||
"publish_dialog_priority_min": "Legkisebb prioritás",
|
"publish_dialog_priority_min": "Legkisebb prioritás",
|
||||||
"publish_dialog_base_url_label": "A szolgáltatás URL-e",
|
"publish_dialog_base_url_label": "A szolgáltatás URL-e",
|
||||||
"publish_dialog_base_url_placeholder": "A szolgáltatás URL-e, pl: https://example.com",
|
"publish_dialog_base_url_placeholder": "A szolgáltatás URL-e, pl: https://example.com",
|
||||||
"publish_dialog_topic_label": "Téma neve",
|
"publish_dialog_topic_label": "Téma neve",
|
||||||
"publish_dialog_priority_max": "Legmagasabb prioritás",
|
"publish_dialog_priority_max": "Legmagasabb prioritás",
|
||||||
"publish_dialog_topic_placeholder": "Téma neve, pl: jozsi_riasztasai",
|
"publish_dialog_topic_placeholder": "Téma neve, pl: jozsi_riasztasai",
|
||||||
"publish_dialog_title_label": "Cím",
|
"publish_dialog_title_label": "Cím",
|
||||||
"publish_dialog_title_placeholder": "Értesítés címe, pl: Fogy a szabad hely",
|
"publish_dialog_title_placeholder": "Értesítés címe, pl: Fogy a szabad hely",
|
||||||
"publish_dialog_message_label": "Üzenet",
|
"publish_dialog_message_label": "Üzenet",
|
||||||
"publish_dialog_message_placeholder": "Írj ide egy üzenetet",
|
"publish_dialog_message_placeholder": "Írj ide egy üzenetet",
|
||||||
"publish_dialog_tags_label": "Címkék",
|
"publish_dialog_tags_label": "Címkék",
|
||||||
"publish_dialog_tags_placeholder": "Címkék vesszővel elválasztva, pl: fontos,srv1-backup",
|
"publish_dialog_tags_placeholder": "Címkék vesszővel elválasztva, pl: fontos,srv1-backup",
|
||||||
"publish_dialog_priority_label": "Prioritás",
|
"publish_dialog_priority_label": "Prioritás",
|
||||||
"publish_dialog_click_label": "URL",
|
"publish_dialog_click_label": "URL",
|
||||||
"publish_dialog_click_placeholder": "Webcím, ami megnyílik, ha az értesítésre kattintanak",
|
"publish_dialog_click_placeholder": "Webcím, ami megnyílik, ha az értesítésre kattintanak",
|
||||||
"publish_dialog_email_label": "Email",
|
"publish_dialog_email_label": "Email",
|
||||||
"publish_dialog_email_placeholder": "Email cím, amire továbbítjuk az értesítést, pl: jozsi@example.com",
|
"publish_dialog_email_placeholder": "Email cím, amire továbbítjuk az értesítést, pl: jozsi@example.com",
|
||||||
"publish_dialog_attach_label": "Csatolmány URL-e",
|
"publish_dialog_attach_label": "Csatolmány URL-e",
|
||||||
"publish_dialog_filename_label": "Fájlnév",
|
"publish_dialog_filename_label": "Fájlnév",
|
||||||
"publish_dialog_filename_placeholder": "Csatolmány fájlneve",
|
"publish_dialog_filename_placeholder": "Csatolmány fájlneve",
|
||||||
"publish_dialog_delay_label": "Késleltetés",
|
"publish_dialog_delay_label": "Késleltetés",
|
||||||
"publish_dialog_delay_placeholder": "Késleltetett küldés, pl: {{unixTimestamp}}, {{relativeTime}}, vagy \"{{naturalLanguage}}\" (Csak angolul)",
|
"publish_dialog_delay_placeholder": "Késleltetett küldés, pl: {{unixTimestamp}}, {{relativeTime}}, vagy \"{{naturalLanguage}}\" (Csak angolul)",
|
||||||
"publish_dialog_other_features": "Egyéb lehetőségek:",
|
"publish_dialog_other_features": "Egyéb lehetőségek:",
|
||||||
"publish_dialog_chip_click_label": "Kattintási URL",
|
"publish_dialog_chip_click_label": "Kattintási URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Helyi fájl csatolása",
|
"publish_dialog_chip_attach_file_label": "Helyi fájl csatolása",
|
||||||
"publish_dialog_chip_delay_label": "Késleltetett kézbesítés",
|
"publish_dialog_chip_delay_label": "Késleltetett kézbesítés",
|
||||||
"publish_dialog_chip_topic_label": "Téma megváltoztatása",
|
"publish_dialog_chip_topic_label": "Téma megváltoztatása",
|
||||||
"publish_dialog_button_cancel_sending": "Küldés megállítása",
|
"publish_dialog_button_cancel_sending": "Küldés megállítása",
|
||||||
"publish_dialog_button_cancel": "Mégsem",
|
"publish_dialog_button_cancel": "Mégsem",
|
||||||
"publish_dialog_checkbox_publish_another": "Küldök még egyet",
|
"publish_dialog_checkbox_publish_another": "Küldök még egyet",
|
||||||
"publish_dialog_attached_file_title": "Csatolt fájl:",
|
"publish_dialog_attached_file_title": "Csatolt fájl:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Csatolmány fájlneve",
|
"publish_dialog_attached_file_filename_placeholder": "Csatolmány fájlneve",
|
||||||
"publish_dialog_drop_file_here": "Ejtsd ide a fájlt",
|
"publish_dialog_drop_file_here": "Ejtsd ide a fájlt",
|
||||||
"emoji_picker_search_placeholder": "Emoji keresése",
|
"emoji_picker_search_placeholder": "Emoji keresése",
|
||||||
"publish_dialog_details_examples_description": "Példákért és az összes küldési képesség részletes leírásához olvasd el a <docsLink>dokumentációt</docsLink>.",
|
"publish_dialog_details_examples_description": "Példákért és az összes küldési képesség részletes leírásához olvasd el a <docsLink>dokumentációt</docsLink>.",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Használjon másik szervert",
|
"subscribe_dialog_subscribe_use_another_label": "Használjon másik szervert",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Feliratkozás",
|
"subscribe_dialog_subscribe_button_subscribe": "Feliratkozás",
|
||||||
"subscribe_dialog_login_title": "Be kell jelentkezni",
|
"subscribe_dialog_login_title": "Be kell jelentkezni",
|
||||||
"subscribe_dialog_subscribe_description": "A témák nem mindig vannak jelszóval védve, ezért olyan nevet válassz, ami nehezen található ki. Miután feliratkoztál, küldhetsz értesítéseket.",
|
"subscribe_dialog_subscribe_description": "A témák nem mindig vannak jelszóval védve, ezért olyan nevet válassz, ami nehezen található ki. Miután feliratkoztál, küldhetsz értesítéseket.",
|
||||||
"subscribe_dialog_login_description": "Ez a téma jelszóval védett. Jelentkezz be a feliratkozáshoz.",
|
"subscribe_dialog_login_description": "Ez a téma jelszóval védett. Jelentkezz be a feliratkozáshoz.",
|
||||||
"subscribe_dialog_login_username_label": "Felhasználónév, pl: jozsi",
|
"subscribe_dialog_login_username_label": "Felhasználónév, pl: jozsi",
|
||||||
"subscribe_dialog_login_password_label": "Jelszó",
|
"subscribe_dialog_login_password_label": "Jelszó",
|
||||||
"subscribe_dialog_login_button_back": "Vissza",
|
"subscribe_dialog_login_button_back": "Vissza",
|
||||||
"subscribe_dialog_login_button_login": "Belépés",
|
"subscribe_dialog_login_button_login": "Belépés",
|
||||||
"subscribe_dialog_error_user_anonymous": "névtelen",
|
"subscribe_dialog_error_user_anonymous": "névtelen",
|
||||||
"subscribe_dialog_error_user_not_authorized": "A(z) {{username}} felhasználónak nincs hozzáférése",
|
"subscribe_dialog_error_user_not_authorized": "A(z) {{username}} felhasználónak nincs hozzáférése",
|
||||||
"prefs_notifications_min_priority_description_any": "Minden értesítést mutat, prioritástól függetlenül",
|
"prefs_notifications_min_priority_description_any": "Minden értesítést mutat, prioritástól függetlenül",
|
||||||
"prefs_notifications_min_priority_description_max": "Csak az 5-ös (legmagasabb) prioritású értesítések jelennek meg",
|
"prefs_notifications_min_priority_description_max": "Csak az 5-ös (legmagasabb) prioritású értesítések jelennek meg",
|
||||||
"prefs_notifications_min_priority_any": "Bármilyen prioritás",
|
"prefs_notifications_min_priority_any": "Bármilyen prioritás",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Alacsony prioritás, vagy magasabb",
|
"prefs_notifications_min_priority_low_and_higher": "Alacsony prioritás, vagy magasabb",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Magas, vagy legmagasabb prioritás",
|
"prefs_notifications_min_priority_high_and_higher": "Magas, vagy legmagasabb prioritás",
|
||||||
"prefs_notifications_min_priority_max_only": "Csak a legmagasabb prioritás",
|
"prefs_notifications_min_priority_max_only": "Csak a legmagasabb prioritás",
|
||||||
"prefs_notifications_sound_title": "Értesítés hangja",
|
"prefs_notifications_sound_title": "Értesítés hangja",
|
||||||
"prefs_notifications_sound_description_none": "Az értesítések nem fognak hangot adni, amikor megérkeznek",
|
"prefs_notifications_sound_description_none": "Az értesítések nem fognak hangot adni, amikor megérkeznek",
|
||||||
"prefs_notifications_sound_no_sound": "Hang nélkül",
|
"prefs_notifications_sound_no_sound": "Hang nélkül",
|
||||||
"prefs_notifications_delete_after_one_week": "1 hét után",
|
"prefs_notifications_delete_after_one_week": "1 hét után",
|
||||||
"prefs_notifications_delete_after_one_month": "1 hónap után",
|
"prefs_notifications_delete_after_one_month": "1 hónap után",
|
||||||
"prefs_notifications_delete_after_never_description": "Az értesítések soha nem lesznek automatikusan törölve",
|
"prefs_notifications_delete_after_never_description": "Az értesítések soha nem lesznek automatikusan törölve",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "A 3 óránál régebbi értesítések automatikus törlése",
|
"prefs_notifications_delete_after_three_hours_description": "A 3 óránál régebbi értesítések automatikus törlése",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Az egy napnál régebbi értesítések automatikus törlése",
|
"prefs_notifications_delete_after_one_day_description": "Az egy napnál régebbi értesítések automatikus törlése",
|
||||||
"prefs_users_description": "Itt tudsz hozzáadni/eltávolítani felhasználókat a védett témákról. Fontos, hogy a felhasználónevet és a jelszót a böngésző helyi tárolójába fogjuk menteni.",
|
"prefs_users_description": "Itt tudsz hozzáadni/eltávolítani felhasználókat a védett témákról. Fontos, hogy a felhasználónevet és a jelszót a böngésző helyi tárolójába fogjuk menteni.",
|
||||||
"prefs_users_table_user_header": "Felhasználó",
|
"prefs_users_table_user_header": "Felhasználó",
|
||||||
"prefs_users_table_base_url_header": "Szerver címe",
|
"prefs_users_table_base_url_header": "Szerver címe",
|
||||||
"prefs_users_dialog_title_edit": "Felhasználó szerkesztése",
|
"prefs_users_dialog_title_edit": "Felhasználó szerkesztése",
|
||||||
"prefs_users_dialog_username_label": "Felhasználónév, pl: jozsi",
|
"prefs_users_dialog_username_label": "Felhasználónév, pl: jozsi",
|
||||||
"prefs_users_dialog_password_label": "Jelszó",
|
"prefs_users_dialog_password_label": "Jelszó",
|
||||||
"prefs_users_dialog_button_add": "Hozzáadás",
|
"prefs_users_dialog_button_add": "Hozzáadás",
|
||||||
"prefs_users_dialog_base_url_label": "Szerver címe, pl: https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "Szerver címe, pl: https://ntfy.sh",
|
||||||
"notifications_loading": "Értesítések betöltése …",
|
"notifications_loading": "Értesítések betöltése …",
|
||||||
"publish_dialog_progress_uploading": "Feltöltés …",
|
"publish_dialog_progress_uploading": "Feltöltés …",
|
||||||
"notifications_click_copy_url_button": "Hivatkozás másolása",
|
"notifications_click_copy_url_button": "Hivatkozás másolása",
|
||||||
"notifications_click_open_button": "Hivatkozás megnyitása",
|
"notifications_click_open_button": "Hivatkozás megnyitása",
|
||||||
"publish_dialog_progress_uploading_detail": "Feltöltés folyamatban: {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Feltöltés folyamatban: {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"notifications_none_for_topic_description": "Értesítés beküldéséhez csak küldj egy PUT, vagy POST kérést a téma URL-ére.",
|
"notifications_none_for_topic_description": "Értesítés beküldéséhez csak küldj egy PUT, vagy POST kérést a téma URL-ére.",
|
||||||
"prefs_notifications_delete_after_one_day": "1 nap után",
|
"prefs_notifications_delete_after_one_day": "1 nap után",
|
||||||
"publish_dialog_attach_placeholder": "Csatolandó fájl címe, pl: https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Csatolandó fájl címe, pl: https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_chip_email_label": "Továbbítás email-ben",
|
"publish_dialog_chip_email_label": "Továbbítás email-ben",
|
||||||
"publish_dialog_chip_attach_url_label": "Fájl csatolása URL-lel",
|
"publish_dialog_chip_attach_url_label": "Fájl csatolása URL-lel",
|
||||||
"publish_dialog_button_send": "Küldés",
|
"publish_dialog_button_send": "Küldés",
|
||||||
"subscribe_dialog_subscribe_title": "Feliratkozás témára",
|
"subscribe_dialog_subscribe_title": "Feliratkozás témára",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Mégsem",
|
"subscribe_dialog_subscribe_button_cancel": "Mégsem",
|
||||||
"prefs_notifications_min_priority_title": "Legkisebb megjelenítendő prioritás",
|
"prefs_notifications_min_priority_title": "Legkisebb megjelenítendő prioritás",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Csak akkor jelenik meg egy értesítés, ha a prioritása {{number}} ({{name}}), vagy fontosabb",
|
"prefs_notifications_min_priority_description_x_or_higher": "Csak akkor jelenik meg egy értesítés, ha a prioritása {{number}} ({{name}}), vagy fontosabb",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Közepes prioritás, vagy magasabb",
|
"prefs_notifications_min_priority_default_and_higher": "Közepes prioritás, vagy magasabb",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Az egy hétnél régebbi értesítések automatikus törlése",
|
"prefs_notifications_delete_after_one_week_description": "Az egy hétnél régebbi értesítések automatikus törlése",
|
||||||
"prefs_users_add_button": "Felhasználó hozzáadása",
|
"prefs_users_add_button": "Felhasználó hozzáadása",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Téma neve, pl: jozsi_riasztasai",
|
"subscribe_dialog_subscribe_topic_placeholder": "Téma neve, pl: jozsi_riasztasai",
|
||||||
"prefs_notifications_title": "Értesítések",
|
"prefs_notifications_title": "Értesítések",
|
||||||
"error_boundary_button_copy_stack_trace": "Verem nyomkövetés másolása",
|
"error_boundary_button_copy_stack_trace": "Verem nyomkövetés másolása",
|
||||||
"prefs_notifications_delete_after_title": "Régi értesítések törlése",
|
"prefs_notifications_delete_after_title": "Régi értesítések törlése",
|
||||||
"prefs_notifications_delete_after_three_hours": "3 óra után",
|
"prefs_notifications_delete_after_three_hours": "3 óra után",
|
||||||
"error_boundary_title": "Jaj ne, az ntfy összeomlott",
|
"error_boundary_title": "Jaj ne, az ntfy összeomlott",
|
||||||
"prefs_notifications_delete_after_never": "Soha",
|
"prefs_notifications_delete_after_never": "Soha",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Az egy hónapnál régebbi értesítések automatikus törlése",
|
"prefs_notifications_delete_after_one_month_description": "Az egy hónapnál régebbi értesítések automatikus törlése",
|
||||||
"prefs_appearance_title": "Megjelenés",
|
"prefs_appearance_title": "Megjelenés",
|
||||||
"priority_default": "közepes",
|
"priority_default": "közepes",
|
||||||
"priority_high": "magas",
|
"priority_high": "magas",
|
||||||
"priority_max": "legmagasabb",
|
"priority_max": "legmagasabb",
|
||||||
"priority_min": "legkisebb",
|
"priority_min": "legkisebb",
|
||||||
"error_boundary_gathering_info": "Több információ…",
|
"error_boundary_gathering_info": "Több információ…",
|
||||||
"publish_dialog_attachment_limits_file_reached": "túllépi a fájlméret korlátot ({{fileSizeLimit}})",
|
"publish_dialog_attachment_limits_file_reached": "túllépi a fájlméret korlátot ({{fileSizeLimit}})",
|
||||||
"prefs_users_title": "Felhasználók kezelése",
|
"prefs_users_title": "Felhasználók kezelése",
|
||||||
"prefs_users_dialog_button_cancel": "Mégsem",
|
"prefs_users_dialog_button_cancel": "Mégsem",
|
||||||
"prefs_users_dialog_button_save": "Mentés",
|
"prefs_users_dialog_button_save": "Mentés",
|
||||||
"prefs_users_dialog_title_add": "Felhasználó hozzáadása",
|
"prefs_users_dialog_title_add": "Felhasználó hozzáadása",
|
||||||
"prefs_appearance_language_title": "Nyelv",
|
"prefs_appearance_language_title": "Nyelv",
|
||||||
"priority_low": "alacsony",
|
"priority_low": "alacsony",
|
||||||
"error_boundary_stack_trace": "Verem nyomkövetés",
|
"error_boundary_stack_trace": "Verem nyomkövetés",
|
||||||
"publish_dialog_title_topic": "A {{topic}} téma értesítése",
|
"publish_dialog_title_topic": "A {{topic}} téma értesítése",
|
||||||
"prefs_notifications_sound_description_some": "Az értesítéseket a(z) {{sound}} hang fogja jelezni",
|
"prefs_notifications_sound_description_some": "Az értesítéseket a(z) {{sound}} hang fogja jelezni",
|
||||||
"error_boundary_description": "Ennek nem szabadott volna megtörténnie. Nagyon sajnáljuk.<br/>Ha van egy perced, <githubLink>jelentsd be GitHubon</githubLink>, vagy tudasd velünk <discordLink>Discordon</discordLink>, vagy <matrixLink>Matrixon</matrixLink>.",
|
"error_boundary_description": "Ennek nem szabadott volna megtörténnie. Nagyon sajnáljuk.<br/>Ha van egy perced, <githubLink>jelentsd be GitHubon</githubLink>, vagy tudasd velünk <discordLink>Discordon</discordLink>, vagy <matrixLink>Matrixon</matrixLink>.",
|
||||||
"action_bar_show_menu": "Menü mutatása",
|
"action_bar_show_menu": "Menü mutatása",
|
||||||
"action_bar_toggle_mute": "Üzenetek némítása/bekapcsolása",
|
"action_bar_toggle_mute": "Üzenetek némítása/bekapcsolása",
|
||||||
"notifications_list_item": "Értesítés",
|
"notifications_list_item": "Értesítés",
|
||||||
"error_boundary_unsupported_indexeddb_description": "A ntfy web alkalmazás működéséhez szükséges az IndexedDB funkció, az ön böngészője nem támogatja az IndexedDB használatát privát böngészés közben.<br/><br/>Miközben privát mód sajnos nem lehetséges, szeretnénk értesíteni hogy magabiztosan használhatja normál módban mert a böngésző minden adatot az ön gépén tárol. Tovább tájékozódhat <githubLink>ezen a Github oldalon</githubLink>, vagy beszéljen velünk <discordLink>Discord-on</discordLink> vagy <matrixLink>Matrix-on</matrixLink>.",
|
"error_boundary_unsupported_indexeddb_description": "A ntfy web alkalmazás működéséhez szükséges az IndexedDB funkció, az ön böngészője nem támogatja az IndexedDB használatát privát böngészés közben.<br/><br/>Miközben privát mód sajnos nem lehetséges, szeretnénk értesíteni hogy magabiztosan használhatja normál módban mert a böngésző minden adatot az ön gépén tárol. Tovább tájékozódhat <githubLink>ezen a Github oldalon</githubLink>, vagy beszéljen velünk <discordLink>Discord-on</discordLink> vagy <matrixLink>Matrix-on</matrixLink>.",
|
||||||
"notifications_priority_x": "Prioritás {{prioritás}}",
|
"notifications_priority_x": "Prioritás {{prioritás}}",
|
||||||
"message_bar_show_dialog": "Küldött üzenetek megjelenítése",
|
"message_bar_show_dialog": "Küldött üzenetek megjelenítése",
|
||||||
"action_bar_logo_alt": "ntfy logó",
|
"action_bar_logo_alt": "ntfy logó",
|
||||||
"action_bar_toggle_action_menu": "Tevékenységkezelő nyitása/zárása",
|
"action_bar_toggle_action_menu": "Tevékenységkezelő nyitása/zárása",
|
||||||
"message_bar_publish": "Üzenet küldése",
|
"message_bar_publish": "Üzenet küldése",
|
||||||
"nav_button_muted": "Értesítések némítva",
|
"nav_button_muted": "Értesítések némítva",
|
||||||
"nav_button_connecting": "csatlakozás",
|
"nav_button_connecting": "csatlakozás",
|
||||||
"notifications_list": "Értesítés lista",
|
"notifications_list": "Értesítés lista",
|
||||||
"notifications_mark_read": "Jelölés olvasottként",
|
"notifications_mark_read": "Jelölés olvasottként",
|
||||||
"notifications_delete": "Törlés",
|
"notifications_delete": "Törlés",
|
||||||
"notifications_new_indicator": "Új értesítés",
|
"notifications_new_indicator": "Új értesítés",
|
||||||
"notifications_attachment_image": "Csatolt kép",
|
"notifications_attachment_image": "Csatolt kép",
|
||||||
"notifications_attachment_file_image": "Kép fájl",
|
"notifications_attachment_file_image": "Kép fájl",
|
||||||
"notifications_attachment_file_video": "Videó fájl",
|
"notifications_attachment_file_video": "Videó fájl",
|
||||||
"notifications_attachment_file_audio": "Hang fájl",
|
"notifications_attachment_file_audio": "Hang fájl",
|
||||||
"notifications_attachment_file_app": "Android alkalmazás fájl",
|
"notifications_attachment_file_app": "Android alkalmazás fájl",
|
||||||
"notifications_attachment_file_document": "egyéb dokumentum",
|
"notifications_attachment_file_document": "egyéb dokumentum",
|
||||||
"publish_dialog_emoji_picker_show": "Emoji kiválasztása",
|
"publish_dialog_emoji_picker_show": "Emoji kiválasztása",
|
||||||
"publish_dialog_topic_reset": "Téma visszaállítása",
|
"publish_dialog_topic_reset": "Téma visszaállítása",
|
||||||
"publish_dialog_click_reset": "URL kattintás törlése",
|
"publish_dialog_click_reset": "URL kattintás törlése",
|
||||||
"publish_dialog_email_reset": "Email továbbítás törlése",
|
"publish_dialog_email_reset": "Email továbbítás törlése",
|
||||||
"publish_dialog_attach_reset": "Csatolt URL törlése",
|
"publish_dialog_attach_reset": "Csatolt URL törlése",
|
||||||
"publish_dialog_delay_reset": "Késleltetett kézbesítés törlése",
|
"publish_dialog_delay_reset": "Késleltetett kézbesítés törlése",
|
||||||
"publish_dialog_attached_file_remove": "Csatolt fájl törlése",
|
"publish_dialog_attached_file_remove": "Csatolt fájl törlése",
|
||||||
"emoji_picker_search_clear": "Keresés törlése",
|
"emoji_picker_search_clear": "Keresés törlése",
|
||||||
"prefs_notifications_sound_play": "Kijelölt hang lejátszása",
|
"prefs_notifications_sound_play": "Kijelölt hang lejátszása",
|
||||||
"prefs_users_table": "Felhasználó táblázat",
|
"prefs_users_table": "Felhasználó táblázat",
|
||||||
"prefs_users_edit_button": "Felhasználó szerkesztése",
|
"prefs_users_edit_button": "Felhasználó szerkesztése",
|
||||||
"prefs_users_delete_button": "Felhasználó törlése",
|
"prefs_users_delete_button": "Felhasználó törlése",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Privát böngészés nem támogatott",
|
"error_boundary_unsupported_indexeddb_title": "Privát böngészés nem támogatott",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "Szolgáltató URL"
|
"subscribe_dialog_subscribe_base_url_label": "Szolgáltató URL"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"notifications_click_copy_url_title": "Salin URL tautan ke papan klip",
|
"notifications_click_copy_url_title": "Salin URL tautan ke papan klip",
|
||||||
"alert_not_supported_title": "Notifikasi tidak didukung",
|
"alert_not_supported_title": "Notifikasi tidak didukung",
|
||||||
"notifications_click_copy_url_button": "Salin tautan",
|
"notifications_click_copy_url_button": "Salin tautan",
|
||||||
"notifications_no_subscriptions_description": "Klik pada tautan \"{{linktext}}\" untuk membuat atau berlangganan ke sebuah topik. Setelah itu, Anda dapat mengirim pesan via PUT atau POST dan Anda akan menerima notifikasi di sini.",
|
"notifications_no_subscriptions_description": "Klik pada tautan \"{{linktext}}\" untuk membuat atau berlangganan ke sebuah topik. Setelah itu, Anda dapat mengirim pesan via PUT atau POST dan Anda akan menerima notifikasi di sini.",
|
||||||
"notifications_example": "Contoh",
|
"notifications_example": "Contoh",
|
||||||
"subscribe_dialog_subscribe_description": "Topik mungkin tidak dilindungi oleh kata sandi, jadi pilih sebuah nama yang tidak mudah untuk ditebak. Setelah berlangganan, Anda dapat PUT/POST notifikasi.",
|
"subscribe_dialog_subscribe_description": "Topik mungkin tidak dilindungi oleh kata sandi, jadi pilih sebuah nama yang tidak mudah untuk ditebak. Setelah berlangganan, Anda dapat PUT/POST notifikasi.",
|
||||||
"subscribe_dialog_login_title": "Login dibutuhkan",
|
"subscribe_dialog_login_title": "Login dibutuhkan",
|
||||||
"prefs_appearance_language_title": "Bahasa",
|
"prefs_appearance_language_title": "Bahasa",
|
||||||
"nav_button_all_notifications": "Semua notifikasi",
|
"nav_button_all_notifications": "Semua notifikasi",
|
||||||
"notifications_none_for_any_title": "Anda belum menerima notifikasi apa pun.",
|
"notifications_none_for_any_title": "Anda belum menerima notifikasi apa pun.",
|
||||||
"action_bar_settings": "Pengaturan",
|
"action_bar_settings": "Pengaturan",
|
||||||
"action_bar_send_test_notification": "Kirim notifikasi uji coba",
|
"action_bar_send_test_notification": "Kirim notifikasi uji coba",
|
||||||
"action_bar_clear_notifications": "Hapus semua notifikasi",
|
"action_bar_clear_notifications": "Hapus semua notifikasi",
|
||||||
"action_bar_unsubscribe": "Batalkan langganan",
|
"action_bar_unsubscribe": "Batalkan langganan",
|
||||||
"message_bar_type_message": "Ketika sebuah pesan di sini",
|
"message_bar_type_message": "Ketika sebuah pesan di sini",
|
||||||
"message_bar_error_publishing": "Terjadi kesalahan mempublikasikan notifikasi",
|
"message_bar_error_publishing": "Terjadi kesalahan mempublikasikan notifikasi",
|
||||||
"publish_dialog_title_label": "Judul",
|
"publish_dialog_title_label": "Judul",
|
||||||
"publish_dialog_message_label": "Pesan",
|
"publish_dialog_message_label": "Pesan",
|
||||||
"nav_button_settings": "Pengaturan",
|
"nav_button_settings": "Pengaturan",
|
||||||
"nav_button_documentation": "Dokumentasi",
|
"nav_button_documentation": "Dokumentasi",
|
||||||
"prefs_users_dialog_button_add": "Tambahkan",
|
"prefs_users_dialog_button_add": "Tambahkan",
|
||||||
"nav_topics_title": "Topik yang dilanggani",
|
"nav_topics_title": "Topik yang dilanggani",
|
||||||
"nav_button_subscribe": "Berlangganan ke topik",
|
"nav_button_subscribe": "Berlangganan ke topik",
|
||||||
"alert_grant_title": "Notifikasi dinonaktifkan",
|
"alert_grant_title": "Notifikasi dinonaktifkan",
|
||||||
"alert_grant_description": "Berikan izin ke peramban untuk menampilkan notifikasi desktop.",
|
"alert_grant_description": "Berikan izin ke peramban untuk menampilkan notifikasi desktop.",
|
||||||
"alert_not_supported_description": "Notifikasi tidak didukung dalam peramban Anda.",
|
"alert_not_supported_description": "Notifikasi tidak didukung dalam peramban Anda.",
|
||||||
"notifications_attachment_open_title": "Pergi ke {{url}}",
|
"notifications_attachment_open_title": "Pergi ke {{url}}",
|
||||||
"notifications_attachment_open_button": "Buka lampiran",
|
"notifications_attachment_open_button": "Buka lampiran",
|
||||||
"notifications_attachment_link_expires": "tautan kadaluwarsa {{date}}",
|
"notifications_attachment_link_expires": "tautan kadaluwarsa {{date}}",
|
||||||
"notifications_attachment_link_expired": "tautan unduhan kadaluwarsa",
|
"notifications_attachment_link_expired": "tautan unduhan kadaluwarsa",
|
||||||
"notifications_actions_open_url_title": "Pergi ke {{url}}",
|
"notifications_actions_open_url_title": "Pergi ke {{url}}",
|
||||||
"notifications_click_open_button": "Buka tautan",
|
"notifications_click_open_button": "Buka tautan",
|
||||||
"publish_dialog_topic_placeholder": "Nama topik, mis. pemberitahuan_andi",
|
"publish_dialog_topic_placeholder": "Nama topik, mis. pemberitahuan_andi",
|
||||||
"nav_button_publish_message": "Publikasikan notifikasi",
|
"nav_button_publish_message": "Publikasikan notifikasi",
|
||||||
"alert_grant_button": "Berikan sekarang",
|
"alert_grant_button": "Berikan sekarang",
|
||||||
"notifications_copied_to_clipboard": "Disalin ke papan klip",
|
"notifications_copied_to_clipboard": "Disalin ke papan klip",
|
||||||
"notifications_tags": "Tanda",
|
"notifications_tags": "Tanda",
|
||||||
"notifications_attachment_copy_url_title": "Salin URL lampiran ke papan klip",
|
"notifications_attachment_copy_url_title": "Salin URL lampiran ke papan klip",
|
||||||
"notifications_attachment_copy_url_button": "Salin URL",
|
"notifications_attachment_copy_url_button": "Salin URL",
|
||||||
"notifications_none_for_topic_title": "Anda belum menerima notifikasi apa pun untuk topik ini.",
|
"notifications_none_for_topic_title": "Anda belum menerima notifikasi apa pun untuk topik ini.",
|
||||||
"notifications_none_for_topic_description": "Untuk mengirimkan notifikasi ke topik ini, tinggal PUT atau POST ke URL topik.",
|
"notifications_none_for_topic_description": "Untuk mengirimkan notifikasi ke topik ini, tinggal PUT atau POST ke URL topik.",
|
||||||
"notifications_none_for_any_description": "Untuk mengirimkan notifikasi ke sebuah topik, tinggal PUT atau POST ke URL topik. Ini adalah contoh menggunakan salah satu topik Anda.",
|
"notifications_none_for_any_description": "Untuk mengirimkan notifikasi ke sebuah topik, tinggal PUT atau POST ke URL topik. Ini adalah contoh menggunakan salah satu topik Anda.",
|
||||||
"notifications_no_subscriptions_title": "Sepertinya Anda belum memiliki langganan apa pun.",
|
"notifications_no_subscriptions_title": "Sepertinya Anda belum memiliki langganan apa pun.",
|
||||||
"publish_dialog_title_topic": "Publikasikan ke {{topic}}",
|
"publish_dialog_title_topic": "Publikasikan ke {{topic}}",
|
||||||
"subscribe_dialog_login_description": "Topik ini dilindungi oleh kata sandi. Mohon masukkan nama pengguna dan kata sandi untuk berlangganan.",
|
"subscribe_dialog_login_description": "Topik ini dilindungi oleh kata sandi. Mohon masukkan nama pengguna dan kata sandi untuk berlangganan.",
|
||||||
"prefs_notifications_min_priority_title": "Prioritas minimum",
|
"prefs_notifications_min_priority_title": "Prioritas minimum",
|
||||||
"error_boundary_gathering_info": "Dapatkan info lanjut …",
|
"error_boundary_gathering_info": "Dapatkan info lanjut …",
|
||||||
"publish_dialog_title_no_topic": "Publikasikan notifikasi",
|
"publish_dialog_title_no_topic": "Publikasikan notifikasi",
|
||||||
"publish_dialog_progress_uploading": "Mengunggah …",
|
"publish_dialog_progress_uploading": "Mengunggah …",
|
||||||
"notifications_more_details": "Untuk informasi lanjut, lihat <websiteLink>situs web</websiteLink> atau <docsLink>dokumentasi</docsLink>.",
|
"notifications_more_details": "Untuk informasi lanjut, lihat <websiteLink>situs web</websiteLink> atau <docsLink>dokumentasi</docsLink>.",
|
||||||
"publish_dialog_progress_uploading_detail": "Mengunggah {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Mengunggah {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_message_published": "Notifikasi terpublikasi",
|
"publish_dialog_message_published": "Notifikasi terpublikasi",
|
||||||
"notifications_loading": "Memuat notifikasi …",
|
"notifications_loading": "Memuat notifikasi …",
|
||||||
"publish_dialog_base_url_label": "URL Layanan",
|
"publish_dialog_base_url_label": "URL Layanan",
|
||||||
"publish_dialog_title_placeholder": "Judul notifikasi, mis. Peringatan ruang disk",
|
"publish_dialog_title_placeholder": "Judul notifikasi, mis. Peringatan ruang disk",
|
||||||
"publish_dialog_tags_label": "Tanda",
|
"publish_dialog_tags_label": "Tanda",
|
||||||
"publish_dialog_priority_label": "Prioritas",
|
"publish_dialog_priority_label": "Prioritas",
|
||||||
"publish_dialog_base_url_placeholder": "URL Layanan, mis. https://contoh.com",
|
"publish_dialog_base_url_placeholder": "URL Layanan, mis. https://contoh.com",
|
||||||
"publish_dialog_attach_placeholder": "Lampirkan file dengan URL, mis. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Lampirkan file dengan URL, mis. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_delay_label": "Jeda",
|
"publish_dialog_delay_label": "Jeda",
|
||||||
"publish_dialog_chip_topic_label": "Ubah topik",
|
"publish_dialog_chip_topic_label": "Ubah topik",
|
||||||
"publish_dialog_button_cancel_sending": "Batalkan pengiriman",
|
"publish_dialog_button_cancel_sending": "Batalkan pengiriman",
|
||||||
"publish_dialog_button_send": "Kirim",
|
"publish_dialog_button_send": "Kirim",
|
||||||
"publish_dialog_attachment_limits_file_reached": "melebihi batasan file {{fileSizeLimit}",
|
"publish_dialog_attachment_limits_file_reached": "melebihi batasan file {{fileSizeLimit}",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "melebihi batasan file dan kuota {{fileSizeLimit}}, hanya {{remainingBytes}}",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "melebihi batasan file dan kuota {{fileSizeLimit}}, hanya {{remainingBytes}}",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "melebihi kuota, hanya {{remainingBytes}}",
|
"publish_dialog_attachment_limits_quota_reached": "melebihi kuota, hanya {{remainingBytes}}",
|
||||||
"publish_dialog_priority_min": "Prioritas min.",
|
"publish_dialog_priority_min": "Prioritas min.",
|
||||||
"publish_dialog_priority_low": "Prioritas rendah",
|
"publish_dialog_priority_low": "Prioritas rendah",
|
||||||
"publish_dialog_priority_default": "Prioritas bawaan",
|
"publish_dialog_priority_default": "Prioritas bawaan",
|
||||||
"publish_dialog_priority_high": "Prioritas tinggi",
|
"publish_dialog_priority_high": "Prioritas tinggi",
|
||||||
"publish_dialog_priority_max": "Prioritas maks.",
|
"publish_dialog_priority_max": "Prioritas maks.",
|
||||||
"publish_dialog_topic_label": "Nama topik",
|
"publish_dialog_topic_label": "Nama topik",
|
||||||
"publish_dialog_message_placeholder": "Ketik sebuah pesan di sini",
|
"publish_dialog_message_placeholder": "Ketik sebuah pesan di sini",
|
||||||
"publish_dialog_click_label": "Klik URL",
|
"publish_dialog_click_label": "Klik URL",
|
||||||
"publish_dialog_tags_placeholder": "Daftar tanda yang dipisah dengan koma, mis. peringatan, cadangan-srv1",
|
"publish_dialog_tags_placeholder": "Daftar tanda yang dipisah dengan koma, mis. peringatan, cadangan-srv1",
|
||||||
"publish_dialog_click_placeholder": "URL yang dibuka ketika notifikasi diklik",
|
"publish_dialog_click_placeholder": "URL yang dibuka ketika notifikasi diklik",
|
||||||
"publish_dialog_email_label": "Email",
|
"publish_dialog_email_label": "Email",
|
||||||
"publish_dialog_email_placeholder": "Alamat untuk meneruskan notifikasi, mis. andi@contoh.com",
|
"publish_dialog_email_placeholder": "Alamat untuk meneruskan notifikasi, mis. andi@contoh.com",
|
||||||
"publish_dialog_attach_label": "URL Lampiran",
|
"publish_dialog_attach_label": "URL Lampiran",
|
||||||
"publish_dialog_filename_label": "Nama File",
|
"publish_dialog_filename_label": "Nama File",
|
||||||
"publish_dialog_filename_placeholder": "Nama file lampiran",
|
"publish_dialog_filename_placeholder": "Nama file lampiran",
|
||||||
"publish_dialog_delay_placeholder": "Penjedaan pengiriman, mis. {{unixTimestamp}}, {{relativeTime}}, atau \"{{naturalLanguage}}\" (hanya Inggris)",
|
"publish_dialog_delay_placeholder": "Penjedaan pengiriman, mis. {{unixTimestamp}}, {{relativeTime}}, atau \"{{naturalLanguage}}\" (hanya Inggris)",
|
||||||
"publish_dialog_other_features": "Fitur lainnya:",
|
"publish_dialog_other_features": "Fitur lainnya:",
|
||||||
"publish_dialog_chip_click_label": "Klik URL",
|
"publish_dialog_chip_click_label": "Klik URL",
|
||||||
"publish_dialog_chip_email_label": "Teruskan ke email",
|
"publish_dialog_chip_email_label": "Teruskan ke email",
|
||||||
"publish_dialog_chip_attach_url_label": "Lampirkan file dengan URL",
|
"publish_dialog_chip_attach_url_label": "Lampirkan file dengan URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Lampirkan file lokal",
|
"publish_dialog_chip_attach_file_label": "Lampirkan file lokal",
|
||||||
"publish_dialog_chip_delay_label": "Jeda pengiriman",
|
"publish_dialog_chip_delay_label": "Jeda pengiriman",
|
||||||
"publish_dialog_button_cancel": "Batal",
|
"publish_dialog_button_cancel": "Batal",
|
||||||
"publish_dialog_details_examples_description": "Untuk contoh dan deskripsi yang rinci oleh semua fitur pengiriman, lihat <docsLink>dokumentasi</docsLink>.",
|
"publish_dialog_details_examples_description": "Untuk contoh dan deskripsi yang rinci oleh semua fitur pengiriman, lihat <docsLink>dokumentasi</docsLink>.",
|
||||||
"publish_dialog_checkbox_publish_another": "Publikasi yang lain",
|
"publish_dialog_checkbox_publish_another": "Publikasi yang lain",
|
||||||
"publish_dialog_attached_file_title": "File yang dilampirkan:",
|
"publish_dialog_attached_file_title": "File yang dilampirkan:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Nama file lampiran",
|
"publish_dialog_attached_file_filename_placeholder": "Nama file lampiran",
|
||||||
"publish_dialog_drop_file_here": "Lepaskan file di sini",
|
"publish_dialog_drop_file_here": "Lepaskan file di sini",
|
||||||
"emoji_picker_search_placeholder": "Cari emoji",
|
"emoji_picker_search_placeholder": "Cari emoji",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Batal",
|
"subscribe_dialog_subscribe_button_cancel": "Batal",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Berlangganan",
|
"subscribe_dialog_subscribe_button_subscribe": "Berlangganan",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonim",
|
"subscribe_dialog_error_user_anonymous": "anonim",
|
||||||
"prefs_notifications_min_priority_any": "Prioritas apa saja",
|
"prefs_notifications_min_priority_any": "Prioritas apa saja",
|
||||||
"prefs_notifications_delete_after_title": "Hapus notifikasi",
|
"prefs_notifications_delete_after_title": "Hapus notifikasi",
|
||||||
"prefs_notifications_delete_after_three_hours": "Setelah tiga jam",
|
"prefs_notifications_delete_after_three_hours": "Setelah tiga jam",
|
||||||
"prefs_notifications_delete_after_one_day": "Setelah satu hari",
|
"prefs_notifications_delete_after_one_day": "Setelah satu hari",
|
||||||
"prefs_users_add_button": "Tambahkan pengguna",
|
"prefs_users_add_button": "Tambahkan pengguna",
|
||||||
"prefs_users_dialog_username_label": "Nama pengguna, mis. andi",
|
"prefs_users_dialog_username_label": "Nama pengguna, mis. andi",
|
||||||
"subscribe_dialog_subscribe_title": "Berlangganan ke topik",
|
"subscribe_dialog_subscribe_title": "Berlangganan ke topik",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Nama topik, mis. pemberitahuan_andi",
|
"subscribe_dialog_subscribe_topic_placeholder": "Nama topik, mis. pemberitahuan_andi",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Gunakan server lain",
|
"subscribe_dialog_subscribe_use_another_label": "Gunakan server lain",
|
||||||
"subscribe_dialog_login_username_label": "Nama pengguna, mis. Andi",
|
"subscribe_dialog_login_username_label": "Nama pengguna, mis. Andi",
|
||||||
"subscribe_dialog_login_button_login": "Masuk",
|
"subscribe_dialog_login_button_login": "Masuk",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Pengguna {{username}} tidak diizinkan",
|
"subscribe_dialog_error_user_not_authorized": "Pengguna {{username}} tidak diizinkan",
|
||||||
"prefs_notifications_title": "Notifikasi",
|
"prefs_notifications_title": "Notifikasi",
|
||||||
"prefs_notifications_sound_no_sound": "Tidak ada suara",
|
"prefs_notifications_sound_no_sound": "Tidak ada suara",
|
||||||
"prefs_users_table_user_header": "Pengguna",
|
"prefs_users_table_user_header": "Pengguna",
|
||||||
"prefs_users_dialog_base_url_label": "URL Layanan, mis. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL Layanan, mis. https://ntfy.sh",
|
||||||
"prefs_users_dialog_button_save": "Simpan",
|
"prefs_users_dialog_button_save": "Simpan",
|
||||||
"prefs_appearance_title": "Tampilan",
|
"prefs_appearance_title": "Tampilan",
|
||||||
"subscribe_dialog_login_password_label": "Kata sandi",
|
"subscribe_dialog_login_password_label": "Kata sandi",
|
||||||
"subscribe_dialog_login_button_back": "Kembali",
|
"subscribe_dialog_login_button_back": "Kembali",
|
||||||
"prefs_notifications_sound_title": "Suara notifikasi",
|
"prefs_notifications_sound_title": "Suara notifikasi",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Prioritas rendah dan lebih tinggi",
|
"prefs_notifications_min_priority_low_and_higher": "Prioritas rendah dan lebih tinggi",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Prioritas bawaan dan lebih tinggi",
|
"prefs_notifications_min_priority_default_and_higher": "Prioritas bawaan dan lebih tinggi",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Prioritas tinggi dan lebih tinggi",
|
"prefs_notifications_min_priority_high_and_higher": "Prioritas tinggi dan lebih tinggi",
|
||||||
"prefs_notifications_min_priority_max_only": "Hanya prioritas maks",
|
"prefs_notifications_min_priority_max_only": "Hanya prioritas maks",
|
||||||
"prefs_notifications_delete_after_never": "Tidak pernah",
|
"prefs_notifications_delete_after_never": "Tidak pernah",
|
||||||
"prefs_notifications_delete_after_one_week": "Setelah satu minggu",
|
"prefs_notifications_delete_after_one_week": "Setelah satu minggu",
|
||||||
"prefs_notifications_delete_after_one_month": "Setelah satu bulan",
|
"prefs_notifications_delete_after_one_month": "Setelah satu bulan",
|
||||||
"prefs_users_title": "Kelola pengguna",
|
"prefs_users_title": "Kelola pengguna",
|
||||||
"prefs_users_description": "Tambahkan/hapus pengguna untuk topik yang dilindungi di sini. Dicatat bahwa nama pengguna dan kata sandi disimpan dalam penyimpanan lokal peramban.",
|
"prefs_users_description": "Tambahkan/hapus pengguna untuk topik yang dilindungi di sini. Dicatat bahwa nama pengguna dan kata sandi disimpan dalam penyimpanan lokal peramban.",
|
||||||
"prefs_users_table_base_url_header": "URL Layanan",
|
"prefs_users_table_base_url_header": "URL Layanan",
|
||||||
"prefs_users_dialog_title_add": "Tambahkan pengguna",
|
"prefs_users_dialog_title_add": "Tambahkan pengguna",
|
||||||
"prefs_users_dialog_title_edit": "Edit pengguna",
|
"prefs_users_dialog_title_edit": "Edit pengguna",
|
||||||
"prefs_users_dialog_password_label": "Kata sandi",
|
"prefs_users_dialog_password_label": "Kata sandi",
|
||||||
"prefs_users_dialog_button_cancel": "Batal",
|
"prefs_users_dialog_button_cancel": "Batal",
|
||||||
"error_boundary_title": "Aduh, ntfy mogok",
|
"error_boundary_title": "Aduh, ntfy mogok",
|
||||||
"error_boundary_description": "Seharusnya ini tidak terjadi. Maaf sekali tentang hal ini.<br/>Jika Anda punya beberapa menit, silakan <githubLink>laporkan ini di GitHub</githubLink>, atau beritahu kami melalui <discordLink>Discord</discordLink> atau <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Seharusnya ini tidak terjadi. Maaf sekali tentang hal ini.<br/>Jika Anda punya beberapa menit, silakan <githubLink>laporkan ini di GitHub</githubLink>, atau beritahu kami melalui <discordLink>Discord</discordLink> atau <matrixLink>Matrix</matrixLink>.",
|
||||||
"error_boundary_stack_trace": "Jejak tumpukan",
|
"error_boundary_stack_trace": "Jejak tumpukan",
|
||||||
"error_boundary_button_copy_stack_trace": "Salin jejak tumpukan",
|
"error_boundary_button_copy_stack_trace": "Salin jejak tumpukan",
|
||||||
"prefs_notifications_sound_description_some": "Notifikasi memainkan suara {{sound}} ketika diterima",
|
"prefs_notifications_sound_description_some": "Notifikasi memainkan suara {{sound}} ketika diterima",
|
||||||
"prefs_notifications_min_priority_description_any": "Menampilkan semua notifikasi, apa pun prioritasnya",
|
"prefs_notifications_min_priority_description_any": "Menampilkan semua notifikasi, apa pun prioritasnya",
|
||||||
"prefs_notifications_min_priority_description_max": "Tampilkan notifikasi jika prioritas adalah 5 (maks)",
|
"prefs_notifications_min_priority_description_max": "Tampilkan notifikasi jika prioritas adalah 5 (maks)",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Notifikasi dihapus secara otomatis setelah tiga jam",
|
"prefs_notifications_delete_after_three_hours_description": "Notifikasi dihapus secara otomatis setelah tiga jam",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Notifikasi dihapus secara otomatis setelah satu minggu",
|
"prefs_notifications_delete_after_one_week_description": "Notifikasi dihapus secara otomatis setelah satu minggu",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Notifikasi dihapus secara otomatis setelah satu bulan",
|
"prefs_notifications_delete_after_one_month_description": "Notifikasi dihapus secara otomatis setelah satu bulan",
|
||||||
"priority_low": "rendah",
|
"priority_low": "rendah",
|
||||||
"priority_high": "tinggi",
|
"priority_high": "tinggi",
|
||||||
"priority_max": "maks",
|
"priority_max": "maks",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Tampilkan notifikasi jika prioritas {{number}} ({{name}}) atau lebih",
|
"prefs_notifications_min_priority_description_x_or_higher": "Tampilkan notifikasi jika prioritas {{number}} ({{name}}) atau lebih",
|
||||||
"prefs_notifications_sound_description_none": "Notifikasi tidak boleh memainkan suara apa pun ketika diterima",
|
"prefs_notifications_sound_description_none": "Notifikasi tidak boleh memainkan suara apa pun ketika diterima",
|
||||||
"prefs_notifications_delete_after_never_description": "Notifikasi tidak pernah dihapus secara otomatis",
|
"prefs_notifications_delete_after_never_description": "Notifikasi tidak pernah dihapus secara otomatis",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Notifikasi dihapus secara otomatis setelah satu hari",
|
"prefs_notifications_delete_after_one_day_description": "Notifikasi dihapus secara otomatis setelah satu hari",
|
||||||
"priority_default": "bawaan",
|
"priority_default": "bawaan",
|
||||||
"priority_min": "min",
|
"priority_min": "min",
|
||||||
"notifications_actions_not_supported": "Tindakan tidak didukung di aplikasi web",
|
"notifications_actions_not_supported": "Tindakan tidak didukung di aplikasi web",
|
||||||
"notifications_actions_http_request_title": "Kirim {{method}} HTTP ke {{url}}",
|
"notifications_actions_http_request_title": "Kirim {{method}} HTTP ke {{url}}",
|
||||||
"action_bar_show_menu": "Tampilkan menu",
|
"action_bar_show_menu": "Tampilkan menu",
|
||||||
"action_bar_logo_alt": "logo ntfy",
|
"action_bar_logo_alt": "logo ntfy",
|
||||||
"action_bar_toggle_mute": "Bisu/suarakan notifikasi",
|
"action_bar_toggle_mute": "Bisu/suarakan notifikasi",
|
||||||
"action_bar_toggle_action_menu": "Buka/tutup menu tindakan",
|
"action_bar_toggle_action_menu": "Buka/tutup menu tindakan",
|
||||||
"message_bar_show_dialog": "Tampilkan dialog publikasi",
|
"message_bar_show_dialog": "Tampilkan dialog publikasi",
|
||||||
"message_bar_publish": "Publikasikan pesan",
|
"message_bar_publish": "Publikasikan pesan",
|
||||||
"nav_button_muted": "Notifikasi dibisukan",
|
"nav_button_muted": "Notifikasi dibisukan",
|
||||||
"nav_button_connecting": "menghubungkan",
|
"nav_button_connecting": "menghubungkan",
|
||||||
"notifications_list": "Daftar notifikasi",
|
"notifications_list": "Daftar notifikasi",
|
||||||
"notifications_list_item": "Notifikasi",
|
"notifications_list_item": "Notifikasi",
|
||||||
"notifications_mark_read": "Tandai sebagai dibaca",
|
"notifications_mark_read": "Tandai sebagai dibaca",
|
||||||
"notifications_delete": "Hapus",
|
"notifications_delete": "Hapus",
|
||||||
"notifications_priority_x": "Prioritas {{priority}}",
|
"notifications_priority_x": "Prioritas {{priority}}",
|
||||||
"notifications_new_indicator": "Notifikasi baru",
|
"notifications_new_indicator": "Notifikasi baru",
|
||||||
"notifications_attachment_image": "Lampiran gambar",
|
"notifications_attachment_image": "Lampiran gambar",
|
||||||
"notifications_attachment_file_image": "file gambar",
|
"notifications_attachment_file_image": "file gambar",
|
||||||
"notifications_attachment_file_video": "file",
|
"notifications_attachment_file_video": "file",
|
||||||
"notifications_attachment_file_audio": "file audio",
|
"notifications_attachment_file_audio": "file audio",
|
||||||
"notifications_attachment_file_app": "file aplikasi Android",
|
"notifications_attachment_file_app": "file aplikasi Android",
|
||||||
"notifications_attachment_file_document": "dokumen lainnya",
|
"notifications_attachment_file_document": "dokumen lainnya",
|
||||||
"publish_dialog_emoji_picker_show": "Pilih emoji",
|
"publish_dialog_emoji_picker_show": "Pilih emoji",
|
||||||
"publish_dialog_topic_reset": "Atur ulang topik",
|
"publish_dialog_topic_reset": "Atur ulang topik",
|
||||||
"publish_dialog_click_reset": "Hapus URL klik",
|
"publish_dialog_click_reset": "Hapus URL klik",
|
||||||
"publish_dialog_email_reset": "Hapus terusan email",
|
"publish_dialog_email_reset": "Hapus terusan email",
|
||||||
"publish_dialog_attach_reset": "Hapus URL lampiran",
|
"publish_dialog_attach_reset": "Hapus URL lampiran",
|
||||||
"publish_dialog_delay_reset": "Hapus pengiriman telat",
|
"publish_dialog_delay_reset": "Hapus pengiriman telat",
|
||||||
"publish_dialog_attached_file_remove": "Hapus file yang dilampirkan",
|
"publish_dialog_attached_file_remove": "Hapus file yang dilampirkan",
|
||||||
"emoji_picker_search_clear": "Hapus pencarian",
|
"emoji_picker_search_clear": "Hapus pencarian",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL layanan",
|
"subscribe_dialog_subscribe_base_url_label": "URL layanan",
|
||||||
"prefs_notifications_sound_play": "Mainkan suara yang dipilih",
|
"prefs_notifications_sound_play": "Mainkan suara yang dipilih",
|
||||||
"prefs_users_table": "Tabel pengguna",
|
"prefs_users_table": "Tabel pengguna",
|
||||||
"prefs_users_edit_button": "Edit pengguna",
|
"prefs_users_edit_button": "Edit pengguna",
|
||||||
"prefs_users_delete_button": "Hapus pengguna",
|
"prefs_users_delete_button": "Hapus pengguna",
|
||||||
"error_boundary_unsupported_indexeddb_description": "Aplikasi web ntfy membutuhkan IndexedDB untuk berfungsi, dan peramban Anda tidak mendukung IndexedDB dalam mode penjelajahan pribadi.<br/><br/>Meskipun ini disayangkan, penggunaan aplikasi web ntfy juga tidak masuk akal di mode penjelajahan pribadi, karena semuanya disimpan di penyimpanan peramban. Anda dapat membaca lebih lanjut tentangnya <githubLink>di masalah GitHub ini</githubLink>, atau berbicara dengan kami di <discordLink>Discord</discordLink> atau <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_unsupported_indexeddb_description": "Aplikasi web ntfy membutuhkan IndexedDB untuk berfungsi, dan peramban Anda tidak mendukung IndexedDB dalam mode penjelajahan pribadi.<br/><br/>Meskipun ini disayangkan, penggunaan aplikasi web ntfy juga tidak masuk akal di mode penjelajahan pribadi, karena semuanya disimpan di penyimpanan peramban. Anda dapat membaca lebih lanjut tentangnya <githubLink>di masalah GitHub ini</githubLink>, atau berbicara dengan kami di <discordLink>Discord</discordLink> atau <matrixLink>Matrix</matrixLink>.",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Penjelajahan privat tidak didukung"
|
"error_boundary_unsupported_indexeddb_title": "Penjelajahan privat tidak didukung"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_logo_alt": "logo ntfy",
|
"action_bar_logo_alt": "logo ntfy",
|
||||||
"action_bar_settings": "Impostazioni",
|
"action_bar_settings": "Impostazioni",
|
||||||
"action_bar_clear_notifications": "Cancella tutte le notifiche",
|
"action_bar_clear_notifications": "Cancella tutte le notifiche",
|
||||||
"action_bar_unsubscribe": "Annulla l'iscrizione",
|
"action_bar_unsubscribe": "Annulla l'iscrizione",
|
||||||
"action_bar_toggle_action_menu": "Apri/chiudi il menu delle azioni",
|
"action_bar_toggle_action_menu": "Apri/chiudi il menu delle azioni",
|
||||||
"message_bar_type_message": "Digita un messaggio qui",
|
"message_bar_type_message": "Digita un messaggio qui",
|
||||||
"message_bar_error_publishing": "Errore durante la pubblicazione della notifica",
|
"message_bar_error_publishing": "Errore durante la pubblicazione della notifica",
|
||||||
"message_bar_show_dialog": "Mostra la finestra di dialogo di pubblicazione",
|
"message_bar_show_dialog": "Mostra la finestra di dialogo di pubblicazione",
|
||||||
"message_bar_publish": "Pubblica messaggio",
|
"message_bar_publish": "Pubblica messaggio",
|
||||||
"nav_topics_title": "Topic a cui si è iscritti",
|
"nav_topics_title": "Topic a cui si è iscritti",
|
||||||
"nav_button_all_notifications": "Tutte le notifiche",
|
"nav_button_all_notifications": "Tutte le notifiche",
|
||||||
"nav_button_settings": "Impostazioni",
|
"nav_button_settings": "Impostazioni",
|
||||||
"nav_button_publish_message": "Pubblica notifica",
|
"nav_button_publish_message": "Pubblica notifica",
|
||||||
"nav_button_subscribe": "Iscriviti al topic",
|
"nav_button_subscribe": "Iscriviti al topic",
|
||||||
"nav_button_muted": "Notifiche disattivate",
|
"nav_button_muted": "Notifiche disattivate",
|
||||||
"nav_button_connecting": "connessione",
|
"nav_button_connecting": "connessione",
|
||||||
"alert_grant_title": "Le notifiche sono disabilitate",
|
"alert_grant_title": "Le notifiche sono disabilitate",
|
||||||
"alert_grant_button": "Concedi ora",
|
"alert_grant_button": "Concedi ora",
|
||||||
"notifications_list": "Elenco notifiche",
|
"notifications_list": "Elenco notifiche",
|
||||||
"notifications_list_item": "Notifiche",
|
"notifications_list_item": "Notifiche",
|
||||||
"notifications_mark_read": "Segna come letto",
|
"notifications_mark_read": "Segna come letto",
|
||||||
"notifications_delete": "Elimina",
|
"notifications_delete": "Elimina",
|
||||||
"notifications_copied_to_clipboard": "Copiato negli appunti",
|
"notifications_copied_to_clipboard": "Copiato negli appunti",
|
||||||
"notifications_tags": "Tags",
|
"notifications_tags": "Tags",
|
||||||
"notifications_priority_x": "Priorità {{priority}}",
|
"notifications_priority_x": "Priorità {{priority}}",
|
||||||
"notifications_new_indicator": "Nuova notifica",
|
"notifications_new_indicator": "Nuova notifica",
|
||||||
"notifications_attachment_image": "Immagine allegata",
|
"notifications_attachment_image": "Immagine allegata",
|
||||||
"notifications_attachment_copy_url_title": "Copia l'URL dell'allegato negli appunti",
|
"notifications_attachment_copy_url_title": "Copia l'URL dell'allegato negli appunti",
|
||||||
"notifications_attachment_copy_url_button": "Copia URL",
|
"notifications_attachment_copy_url_button": "Copia URL",
|
||||||
"notifications_attachment_open_title": "Vai a {{url}}",
|
"notifications_attachment_open_title": "Vai a {{url}}",
|
||||||
"notifications_attachment_open_button": "Apri allegato",
|
"notifications_attachment_open_button": "Apri allegato",
|
||||||
"notifications_attachment_link_expires": "Il collegamento scade il {{date}}",
|
"notifications_attachment_link_expires": "Il collegamento scade il {{date}}",
|
||||||
"notifications_attachment_link_expired": "link per il download scaduto",
|
"notifications_attachment_link_expired": "link per il download scaduto",
|
||||||
"notifications_attachment_file_image": "file immagine",
|
"notifications_attachment_file_image": "file immagine",
|
||||||
"notifications_attachment_file_video": "file video",
|
"notifications_attachment_file_video": "file video",
|
||||||
"action_bar_toggle_mute": "Abilita/disabilita le notifiche",
|
"action_bar_toggle_mute": "Abilita/disabilita le notifiche",
|
||||||
"notifications_attachment_file_document": "altro documento",
|
"notifications_attachment_file_document": "altro documento",
|
||||||
"notifications_click_copy_url_button": "Copia link",
|
"notifications_click_copy_url_button": "Copia link",
|
||||||
"notifications_click_open_button": "Apri link",
|
"notifications_click_open_button": "Apri link",
|
||||||
"notifications_actions_open_url_title": "Vai a {{url}}",
|
"notifications_actions_open_url_title": "Vai a {{url}}",
|
||||||
"notifications_actions_not_supported": "Azione non supportata nell'app Web",
|
"notifications_actions_not_supported": "Azione non supportata nell'app Web",
|
||||||
"notifications_none_for_topic_title": "Non hai ancora ricevuto alcuna notifica per questo topic.",
|
"notifications_none_for_topic_title": "Non hai ancora ricevuto alcuna notifica per questo topic.",
|
||||||
"notifications_none_for_topic_description": "Per inviare notifiche a questo argomento, è sufficiente PUT o POST all'URL del topic.",
|
"notifications_none_for_topic_description": "Per inviare notifiche a questo argomento, è sufficiente PUT o POST all'URL del topic.",
|
||||||
"notifications_none_for_any_title": "Non hai ricevuto alcuna notifica.",
|
"notifications_none_for_any_title": "Non hai ricevuto alcuna notifica.",
|
||||||
"notifications_no_subscriptions_title": "Sembra che tu non abbia ancora abbonamenti.",
|
"notifications_no_subscriptions_title": "Sembra che tu non abbia ancora abbonamenti.",
|
||||||
"notifications_example": "Esempio",
|
"notifications_example": "Esempio",
|
||||||
"notifications_more_details": "Per ulteriori informazioni, consulta il <websiteLink>sito web</websiteLink> o <docsLink>documentazione</docsLink>.",
|
"notifications_more_details": "Per ulteriori informazioni, consulta il <websiteLink>sito web</websiteLink> o <docsLink>documentazione</docsLink>.",
|
||||||
"notifications_loading": "Caricamento notifiche in corso…",
|
"notifications_loading": "Caricamento notifiche in corso…",
|
||||||
"publish_dialog_title_topic": "Pubblica su {{topic}}",
|
"publish_dialog_title_topic": "Pubblica su {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Pubblica notifica",
|
"publish_dialog_title_no_topic": "Pubblica notifica",
|
||||||
"publish_dialog_progress_uploading": "Caricamento in corso…",
|
"publish_dialog_progress_uploading": "Caricamento in corso…",
|
||||||
"publish_dialog_progress_uploading_detail": "Caricamento {{loaded}}/{{total}} ({{percent}}%)…",
|
"publish_dialog_progress_uploading_detail": "Caricamento {{loaded}}/{{total}} ({{percent}}%)…",
|
||||||
"publish_dialog_message_published": "Notifica pubblicata",
|
"publish_dialog_message_published": "Notifica pubblicata",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "supera {{fileSizeLimit}} limite di file e quota, {{remainingBytes}} rimanenti",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "supera {{fileSizeLimit}} limite di file e quota, {{remainingBytes}} rimanenti",
|
||||||
"publish_dialog_attachment_limits_file_reached": "supera di {{fileSizeLimit}} il limite dei file",
|
"publish_dialog_attachment_limits_file_reached": "supera di {{fileSizeLimit}} il limite dei file",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "supera la quota, {{remainingBytes}} rimanenti",
|
"publish_dialog_attachment_limits_quota_reached": "supera la quota, {{remainingBytes}} rimanenti",
|
||||||
"publish_dialog_emoji_picker_show": "Scegli emoji",
|
"publish_dialog_emoji_picker_show": "Scegli emoji",
|
||||||
"publish_dialog_priority_min": "Min. priorità",
|
"publish_dialog_priority_min": "Min. priorità",
|
||||||
"publish_dialog_priority_low": "Bassa priorità",
|
"publish_dialog_priority_low": "Bassa priorità",
|
||||||
"publish_dialog_priority_default": "Priorità predefinita",
|
"publish_dialog_priority_default": "Priorità predefinita",
|
||||||
"publish_dialog_priority_high": "Priorità alta",
|
"publish_dialog_priority_high": "Priorità alta",
|
||||||
"publish_dialog_priority_max": "Max. priorità",
|
"publish_dialog_priority_max": "Max. priorità",
|
||||||
"publish_dialog_base_url_label": "URL del servizio",
|
"publish_dialog_base_url_label": "URL del servizio",
|
||||||
"publish_dialog_base_url_placeholder": "URL del servizio, ad es. https://esempio.com",
|
"publish_dialog_base_url_placeholder": "URL del servizio, ad es. https://esempio.com",
|
||||||
"publish_dialog_topic_label": "Nome topic",
|
"publish_dialog_topic_label": "Nome topic",
|
||||||
"publish_dialog_topic_placeholder": "Nome topic, ad es. avvisi_di_phil",
|
"publish_dialog_topic_placeholder": "Nome topic, ad es. avvisi_di_phil",
|
||||||
"publish_dialog_topic_reset": "Reset topic",
|
"publish_dialog_topic_reset": "Reset topic",
|
||||||
"publish_dialog_title_label": "Titolo",
|
"publish_dialog_title_label": "Titolo",
|
||||||
"publish_dialog_title_placeholder": "Titolo della notifica, ad es. Avviso di spazio su disco",
|
"publish_dialog_title_placeholder": "Titolo della notifica, ad es. Avviso di spazio su disco",
|
||||||
"publish_dialog_message_label": "Messaggio",
|
"publish_dialog_message_label": "Messaggio",
|
||||||
"publish_dialog_message_placeholder": "Digita un messaggio qui",
|
"publish_dialog_message_placeholder": "Digita un messaggio qui",
|
||||||
"publish_dialog_tags_label": "Tags",
|
"publish_dialog_tags_label": "Tags",
|
||||||
"publish_dialog_priority_label": "Priorità",
|
"publish_dialog_priority_label": "Priorità",
|
||||||
"publish_dialog_click_label": "Clicca URL",
|
"publish_dialog_click_label": "Clicca URL",
|
||||||
"publish_dialog_click_reset": "Rimuovi l'URL del clic",
|
"publish_dialog_click_reset": "Rimuovi l'URL del clic",
|
||||||
"publish_dialog_email_label": "Email",
|
"publish_dialog_email_label": "Email",
|
||||||
"publish_dialog_email_placeholder": "Indirizzo a cui inoltrare la notifica, ad es. phil@example.com",
|
"publish_dialog_email_placeholder": "Indirizzo a cui inoltrare la notifica, ad es. phil@example.com",
|
||||||
"publish_dialog_email_reset": "Rimuovi inoltro email",
|
"publish_dialog_email_reset": "Rimuovi inoltro email",
|
||||||
"publish_dialog_attach_label": "URL Allegato",
|
"publish_dialog_attach_label": "URL Allegato",
|
||||||
"publish_dialog_attach_reset": "Rimuovi l'URL dell'allegato",
|
"publish_dialog_attach_reset": "Rimuovi l'URL dell'allegato",
|
||||||
"publish_dialog_filename_label": "Nome del file",
|
"publish_dialog_filename_label": "Nome del file",
|
||||||
"publish_dialog_filename_placeholder": "Nome file allegato",
|
"publish_dialog_filename_placeholder": "Nome file allegato",
|
||||||
"publish_dialog_delay_placeholder": "Consegna ritardata, ad es. {{unixTimestamp}}, {{relativeTime}} o \"{{naturalLanguage}}\" (solo in inglese)",
|
"publish_dialog_delay_placeholder": "Consegna ritardata, ad es. {{unixTimestamp}}, {{relativeTime}} o \"{{naturalLanguage}}\" (solo in inglese)",
|
||||||
"publish_dialog_delay_reset": "Rimuovere la consegna ritardata",
|
"publish_dialog_delay_reset": "Rimuovere la consegna ritardata",
|
||||||
"publish_dialog_other_features": "Altre funzionalità:",
|
"publish_dialog_other_features": "Altre funzionalità:",
|
||||||
"publish_dialog_chip_click_label": "Fare clic su URL",
|
"publish_dialog_chip_click_label": "Fare clic su URL",
|
||||||
"publish_dialog_chip_email_label": "Inoltra a e-mail",
|
"publish_dialog_chip_email_label": "Inoltra a e-mail",
|
||||||
"publish_dialog_chip_attach_url_label": "Allega il file tramite URL",
|
"publish_dialog_chip_attach_url_label": "Allega il file tramite URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Allega file locale",
|
"publish_dialog_chip_attach_file_label": "Allega file locale",
|
||||||
"publish_dialog_chip_delay_label": "Ritardo nella consegna",
|
"publish_dialog_chip_delay_label": "Ritardo nella consegna",
|
||||||
"publish_dialog_button_cancel_sending": "Annulla l'invio",
|
"publish_dialog_button_cancel_sending": "Annulla l'invio",
|
||||||
"publish_dialog_button_cancel": "Annulla",
|
"publish_dialog_button_cancel": "Annulla",
|
||||||
"publish_dialog_button_send": "Invia",
|
"publish_dialog_button_send": "Invia",
|
||||||
"publish_dialog_checkbox_publish_another": "Pubblica un altro",
|
"publish_dialog_checkbox_publish_another": "Pubblica un altro",
|
||||||
"publish_dialog_attached_file_title": "File allegato:",
|
"publish_dialog_attached_file_title": "File allegato:",
|
||||||
"publish_dialog_attached_file_remove": "Rimuovi il file allegato",
|
"publish_dialog_attached_file_remove": "Rimuovi il file allegato",
|
||||||
"publish_dialog_drop_file_here": "Trascina il file qui",
|
"publish_dialog_drop_file_here": "Trascina il file qui",
|
||||||
"emoji_picker_search_clear": "Cancella ricerca",
|
"emoji_picker_search_clear": "Cancella ricerca",
|
||||||
"subscribe_dialog_subscribe_title": "Iscriviti al topic",
|
"subscribe_dialog_subscribe_title": "Iscriviti al topic",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Nome dell'argomento, ad es. avvisi_di_phil",
|
"subscribe_dialog_subscribe_topic_placeholder": "Nome dell'argomento, ad es. avvisi_di_phil",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL del servizio",
|
"subscribe_dialog_subscribe_base_url_label": "URL del servizio",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Annulla",
|
"subscribe_dialog_subscribe_button_cancel": "Annulla",
|
||||||
"subscribe_dialog_login_title": "Accesso richiesto",
|
"subscribe_dialog_login_title": "Accesso richiesto",
|
||||||
"subscribe_dialog_login_username_label": "Nome utente, ad es. phil",
|
"subscribe_dialog_login_username_label": "Nome utente, ad es. phil",
|
||||||
"subscribe_dialog_login_button_login": "Login",
|
"subscribe_dialog_login_button_login": "Login",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonimo",
|
"subscribe_dialog_error_user_anonymous": "anonimo",
|
||||||
"prefs_notifications_sound_title": "Suono di notifica",
|
"prefs_notifications_sound_title": "Suono di notifica",
|
||||||
"prefs_notifications_sound_description_some": "Le notifiche riproducono il suono {{sound}} quando arrivano",
|
"prefs_notifications_sound_description_some": "Le notifiche riproducono il suono {{sound}} quando arrivano",
|
||||||
"prefs_notifications_sound_no_sound": "Nessun suono",
|
"prefs_notifications_sound_no_sound": "Nessun suono",
|
||||||
"prefs_notifications_min_priority_description_any": "Visualizzazione di tutte le notifiche, indipendentemente dalla priorità",
|
"prefs_notifications_min_priority_description_any": "Visualizzazione di tutte le notifiche, indipendentemente dalla priorità",
|
||||||
"prefs_notifications_min_priority_description_max": "Mostra notifiche se la priorità è 5 (max)",
|
"prefs_notifications_min_priority_description_max": "Mostra notifiche se la priorità è 5 (max)",
|
||||||
"prefs_notifications_min_priority_any": "Qualsiasi priorità",
|
"prefs_notifications_min_priority_any": "Qualsiasi priorità",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Priorità bassa e superiore",
|
"prefs_notifications_min_priority_low_and_higher": "Priorità bassa e superiore",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Priorità alta e superiore",
|
"prefs_notifications_min_priority_high_and_higher": "Priorità alta e superiore",
|
||||||
"prefs_notifications_min_priority_max_only": "Solo priorità massima",
|
"prefs_notifications_min_priority_max_only": "Solo priorità massima",
|
||||||
"prefs_notifications_delete_after_never": "Mai",
|
"prefs_notifications_delete_after_never": "Mai",
|
||||||
"prefs_notifications_delete_after_three_hours": "Dopo tre ore",
|
"prefs_notifications_delete_after_three_hours": "Dopo tre ore",
|
||||||
"prefs_notifications_delete_after_one_day": "Dopo un giorno",
|
"prefs_notifications_delete_after_one_day": "Dopo un giorno",
|
||||||
"prefs_notifications_delete_after_never_description": "Le notifiche non vengono mai eliminate automaticamente",
|
"prefs_notifications_delete_after_never_description": "Le notifiche non vengono mai eliminate automaticamente",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Le notifiche vengono eliminate automaticamente dopo un giorno",
|
"prefs_notifications_delete_after_one_day_description": "Le notifiche vengono eliminate automaticamente dopo un giorno",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Le notifiche vengono eliminate automaticamente dopo una settimana",
|
"prefs_notifications_delete_after_one_week_description": "Le notifiche vengono eliminate automaticamente dopo una settimana",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Le notifiche vengono eliminate automaticamente dopo un mese",
|
"prefs_notifications_delete_after_one_month_description": "Le notifiche vengono eliminate automaticamente dopo un mese",
|
||||||
"prefs_users_title": "Gestisci gli utenti",
|
"prefs_users_title": "Gestisci gli utenti",
|
||||||
"prefs_users_description": "Aggiungi/rimuovi utenti per i tuoi topic protetti qui. Tieni presente che nome utente e password sono memorizzati nella memoria locale del browser.",
|
"prefs_users_description": "Aggiungi/rimuovi utenti per i tuoi topic protetti qui. Tieni presente che nome utente e password sono memorizzati nella memoria locale del browser.",
|
||||||
"prefs_users_table": "Tabella utenti",
|
"prefs_users_table": "Tabella utenti",
|
||||||
"prefs_users_add_button": "Aggiungi utente",
|
"prefs_users_add_button": "Aggiungi utente",
|
||||||
"prefs_users_edit_button": "Modifica utente",
|
"prefs_users_edit_button": "Modifica utente",
|
||||||
"prefs_users_delete_button": "Elimina utente",
|
"prefs_users_delete_button": "Elimina utente",
|
||||||
"prefs_users_table_user_header": "Utente",
|
"prefs_users_table_user_header": "Utente",
|
||||||
"prefs_users_table_base_url_header": "URL del servizio",
|
"prefs_users_table_base_url_header": "URL del servizio",
|
||||||
"prefs_users_dialog_title_add": "Aggiungi utente",
|
"prefs_users_dialog_title_add": "Aggiungi utente",
|
||||||
"prefs_users_dialog_title_edit": "Modifica utente",
|
"prefs_users_dialog_title_edit": "Modifica utente",
|
||||||
"prefs_users_dialog_base_url_label": "URL del servizio, ad es. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL del servizio, ad es. https://ntfy.sh",
|
||||||
"prefs_users_dialog_username_label": "Nome utente, ad es. phil",
|
"prefs_users_dialog_username_label": "Nome utente, ad es. phil",
|
||||||
"prefs_users_dialog_password_label": "Password",
|
"prefs_users_dialog_password_label": "Password",
|
||||||
"prefs_users_dialog_button_cancel": "Annulla",
|
"prefs_users_dialog_button_cancel": "Annulla",
|
||||||
"prefs_users_dialog_button_add": "Aggiungere",
|
"prefs_users_dialog_button_add": "Aggiungere",
|
||||||
"prefs_users_dialog_button_save": "Salva",
|
"prefs_users_dialog_button_save": "Salva",
|
||||||
"prefs_appearance_title": "Aspetto",
|
"prefs_appearance_title": "Aspetto",
|
||||||
"prefs_appearance_language_title": "Lingua",
|
"prefs_appearance_language_title": "Lingua",
|
||||||
"priority_min": "min",
|
"priority_min": "min",
|
||||||
"priority_low": "basso",
|
"priority_low": "basso",
|
||||||
"priority_default": "predefinito",
|
"priority_default": "predefinito",
|
||||||
"priority_high": "alto",
|
"priority_high": "alto",
|
||||||
"priority_max": "max",
|
"priority_max": "max",
|
||||||
"error_boundary_title": "Oh no, ntfy è andato in crash",
|
"error_boundary_title": "Oh no, ntfy è andato in crash",
|
||||||
"error_boundary_description": "Questo ovviamente non dovrebbe accadere. Mi dispiace molto per questo.<br/>Se hai un minuto, per favore <githubLink>segnala su GitHub</githubLink>, o faccelo sapere tramite <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink> .",
|
"error_boundary_description": "Questo ovviamente non dovrebbe accadere. Mi dispiace molto per questo.<br/>Se hai un minuto, per favore <githubLink>segnala su GitHub</githubLink>, o faccelo sapere tramite <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink> .",
|
||||||
"error_boundary_button_copy_stack_trace": "Copia traccia dello stack",
|
"error_boundary_button_copy_stack_trace": "Copia traccia dello stack",
|
||||||
"error_boundary_stack_trace": "Traccia dello stack",
|
"error_boundary_stack_trace": "Traccia dello stack",
|
||||||
"error_boundary_gathering_info": "Raccogli più informazioni…",
|
"error_boundary_gathering_info": "Raccogli più informazioni…",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Navigazione privata non supportata",
|
"error_boundary_unsupported_indexeddb_title": "Navigazione privata non supportata",
|
||||||
"action_bar_show_menu": "Mostra menu",
|
"action_bar_show_menu": "Mostra menu",
|
||||||
"action_bar_send_test_notification": "Inviare una notifica di prova",
|
"action_bar_send_test_notification": "Inviare una notifica di prova",
|
||||||
"alert_not_supported_description": "Le notifiche non sono supportate nel tuo browser.",
|
"alert_not_supported_description": "Le notifiche non sono supportate nel tuo browser.",
|
||||||
"nav_button_documentation": "Documentazione",
|
"nav_button_documentation": "Documentazione",
|
||||||
"notifications_actions_http_request_title": "Invia HTTP {{method}} a {{url}}",
|
"notifications_actions_http_request_title": "Invia HTTP {{method}} a {{url}}",
|
||||||
"alert_grant_description": "Concedi al tuo browser l'autorizzazione a visualizzare le notifiche sul desktop.",
|
"alert_grant_description": "Concedi al tuo browser l'autorizzazione a visualizzare le notifiche sul desktop.",
|
||||||
"alert_not_supported_title": "Notifiche non supportate",
|
"alert_not_supported_title": "Notifiche non supportate",
|
||||||
"notifications_attachment_file_app": "file app Android",
|
"notifications_attachment_file_app": "file app Android",
|
||||||
"notifications_no_subscriptions_description": "Fai clic sul link \"{{linktext}}\" per creare o iscriverti a un topic. Successivamente, puoi inviare messaggi tramite PUT o POST e riceverai le notifiche qui.",
|
"notifications_no_subscriptions_description": "Fai clic sul link \"{{linktext}}\" per creare o iscriverti a un topic. Successivamente, puoi inviare messaggi tramite PUT o POST e riceverai le notifiche qui.",
|
||||||
"notifications_attachment_file_audio": "file audio",
|
"notifications_attachment_file_audio": "file audio",
|
||||||
"notifications_none_for_any_description": "Per inviare notifiche a un topic, è sufficiente PUT o POST all'URL del topic. Ecco un esempio utilizzando uno dei tuoi topic.",
|
"notifications_none_for_any_description": "Per inviare notifiche a un topic, è sufficiente PUT o POST all'URL del topic. Ecco un esempio utilizzando uno dei tuoi topic.",
|
||||||
"notifications_click_copy_url_title": "Copia l'URL del collegamento negli appunti",
|
"notifications_click_copy_url_title": "Copia l'URL del collegamento negli appunti",
|
||||||
"prefs_notifications_sound_description_none": "Le notifiche non emettono alcun suono quando arrivano",
|
"prefs_notifications_sound_description_none": "Le notifiche non emettono alcun suono quando arrivano",
|
||||||
"publish_dialog_delay_label": "Ritardo",
|
"publish_dialog_delay_label": "Ritardo",
|
||||||
"publish_dialog_tags_placeholder": "Elenco di tag separato da virgole, ad es. avviso, backup-srv1",
|
"publish_dialog_tags_placeholder": "Elenco di tag separato da virgole, ad es. avviso, backup-srv1",
|
||||||
"publish_dialog_click_placeholder": "URL che viene aperto quando si fa clic sulla notifica",
|
"publish_dialog_click_placeholder": "URL che viene aperto quando si fa clic sulla notifica",
|
||||||
"publish_dialog_attach_placeholder": "Allega file tramite URL, ad es. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Allega file tramite URL, ad es. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_chip_topic_label": "Cambia topic",
|
"publish_dialog_chip_topic_label": "Cambia topic",
|
||||||
"publish_dialog_details_examples_description": "Per esempi e una descrizione dettagliata di tutte le funzioni di invio, fare riferimento alla <docsLink>documentazione</docsLink>.",
|
"publish_dialog_details_examples_description": "Per esempi e una descrizione dettagliata di tutte le funzioni di invio, fare riferimento alla <docsLink>documentazione</docsLink>.",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Nome file allegato",
|
"publish_dialog_attached_file_filename_placeholder": "Nome file allegato",
|
||||||
"emoji_picker_search_placeholder": "Cerca emoji",
|
"emoji_picker_search_placeholder": "Cerca emoji",
|
||||||
"subscribe_dialog_subscribe_description": "Gli argomenti potrebbero non essere protetti da password, quindi scegli un nome che non sia facile da indovinare. Una volta iscritto, puoi inviare le notifiche tramite PUT/POST.",
|
"subscribe_dialog_subscribe_description": "Gli argomenti potrebbero non essere protetti da password, quindi scegli un nome che non sia facile da indovinare. Una volta iscritto, puoi inviare le notifiche tramite PUT/POST.",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Usa un altro server",
|
"subscribe_dialog_subscribe_use_another_label": "Usa un altro server",
|
||||||
"subscribe_dialog_login_password_label": "Password",
|
"subscribe_dialog_login_password_label": "Password",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Iscriviti",
|
"subscribe_dialog_subscribe_button_subscribe": "Iscriviti",
|
||||||
"prefs_notifications_sound_play": "Riproduci il suono selezionato",
|
"prefs_notifications_sound_play": "Riproduci il suono selezionato",
|
||||||
"prefs_notifications_min_priority_title": "Priorità minima",
|
"prefs_notifications_min_priority_title": "Priorità minima",
|
||||||
"subscribe_dialog_login_description": "Questo argomento è protetto da password. Per favore inserisci username e password per iscriverti.",
|
"subscribe_dialog_login_description": "Questo argomento è protetto da password. Per favore inserisci username e password per iscriverti.",
|
||||||
"subscribe_dialog_login_button_back": "Indietro",
|
"subscribe_dialog_login_button_back": "Indietro",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Utente {{username}} non autorizzato",
|
"subscribe_dialog_error_user_not_authorized": "Utente {{username}} non autorizzato",
|
||||||
"prefs_notifications_title": "Notifiche",
|
"prefs_notifications_title": "Notifiche",
|
||||||
"prefs_notifications_delete_after_title": "Elimina le notifiche",
|
"prefs_notifications_delete_after_title": "Elimina le notifiche",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Priorità predefinita e superiore",
|
"prefs_notifications_min_priority_default_and_higher": "Priorità predefinita e superiore",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Mostra le notifiche se la priorità è {{number}} ({{name}}) o superiore",
|
"prefs_notifications_min_priority_description_x_or_higher": "Mostra le notifiche se la priorità è {{number}} ({{name}}) o superiore",
|
||||||
"prefs_notifications_delete_after_one_week": "Dopo una settimana",
|
"prefs_notifications_delete_after_one_week": "Dopo una settimana",
|
||||||
"prefs_notifications_delete_after_one_month": "Dopo un mese",
|
"prefs_notifications_delete_after_one_month": "Dopo un mese",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Le notifiche vengono eliminate automaticamente dopo tre ore",
|
"prefs_notifications_delete_after_three_hours_description": "Le notifiche vengono eliminate automaticamente dopo tre ore",
|
||||||
"error_boundary_unsupported_indexeddb_description": "L'app web ntfy ha bisogno di IndexedDB per funzionare e il tuo browser non supporta IndexedDB in modalità di navigazione privata.<br/><br/>Anche se questo è un peccato, non ha molto senso usare il web ntfy app in modalità di navigazione privata comunque, perché tutto è archiviato nella memoria del browser. Puoi leggere di più a riguardo <githubLink>in questo numero di GitHub</githubLink> o parlarci su <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink>."
|
"error_boundary_unsupported_indexeddb_description": "L'app web ntfy ha bisogno di IndexedDB per funzionare e il tuo browser non supporta IndexedDB in modalità di navigazione privata.<br/><br/>Anche se questo è un peccato, non ha molto senso usare il web ntfy app in modalità di navigazione privata comunque, perché tutto è archiviato nella memoria del browser. Puoi leggere di più a riguardo <githubLink>in questo numero di GitHub</githubLink> o parlarci su <discordLink>Discord</discordLink> o <matrixLink>Matrix</matrixLink>."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"message_bar_error_publishing": "通知送信エラー",
|
"message_bar_error_publishing": "通知送信エラー",
|
||||||
"nav_button_all_notifications": "全ての通知",
|
"nav_button_all_notifications": "全ての通知",
|
||||||
"nav_button_settings": "設定",
|
"nav_button_settings": "設定",
|
||||||
"notifications_click_open_button": "リンクを開く",
|
"notifications_click_open_button": "リンクを開く",
|
||||||
"action_bar_send_test_notification": "テスト通知を送信",
|
"action_bar_send_test_notification": "テスト通知を送信",
|
||||||
"action_bar_clear_notifications": "全ての通知を消去",
|
"action_bar_clear_notifications": "全ての通知を消去",
|
||||||
"action_bar_unsubscribe": "購読解除",
|
"action_bar_unsubscribe": "購読解除",
|
||||||
"nav_button_documentation": "ドキュメント",
|
"nav_button_documentation": "ドキュメント",
|
||||||
"alert_not_supported_description": "通知機能はこのブラウザではサポートされていません。",
|
"alert_not_supported_description": "通知機能はこのブラウザではサポートされていません。",
|
||||||
"notifications_copied_to_clipboard": "クリップボードにコピーしました",
|
"notifications_copied_to_clipboard": "クリップボードにコピーしました",
|
||||||
"notifications_example": "例",
|
"notifications_example": "例",
|
||||||
"publish_dialog_title_topic": "{{topic}}に送信",
|
"publish_dialog_title_topic": "{{topic}}に送信",
|
||||||
"publish_dialog_title_no_topic": "通知を送信",
|
"publish_dialog_title_no_topic": "通知を送信",
|
||||||
"publish_dialog_progress_uploading": "アップロード中…",
|
"publish_dialog_progress_uploading": "アップロード中…",
|
||||||
"publish_dialog_progress_uploading_detail": "アップロード中 {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "アップロード中 {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_message_published": "通知を送信しました",
|
"publish_dialog_message_published": "通知を送信しました",
|
||||||
"publish_dialog_title_label": "タイトル",
|
"publish_dialog_title_label": "タイトル",
|
||||||
"publish_dialog_filename_label": "ファイル名",
|
"publish_dialog_filename_label": "ファイル名",
|
||||||
"subscribe_dialog_login_description": "このトピックはログインする必要があります。ユーザー名とパスワードを入力してください。",
|
"subscribe_dialog_login_description": "このトピックはログインする必要があります。ユーザー名とパスワードを入力してください。",
|
||||||
"subscribe_dialog_login_username_label": "ユーザー名, 例) phil",
|
"subscribe_dialog_login_username_label": "ユーザー名, 例) phil",
|
||||||
"subscribe_dialog_login_password_label": "パスワード",
|
"subscribe_dialog_login_password_label": "パスワード",
|
||||||
"subscribe_dialog_login_button_back": "戻る",
|
"subscribe_dialog_login_button_back": "戻る",
|
||||||
"subscribe_dialog_login_button_login": "ログイン",
|
"subscribe_dialog_login_button_login": "ログイン",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "優先度高 およびそれ以上",
|
"prefs_notifications_min_priority_high_and_higher": "優先度高 およびそれ以上",
|
||||||
"prefs_notifications_min_priority_max_only": "優先度最高のみ",
|
"prefs_notifications_min_priority_max_only": "優先度最高のみ",
|
||||||
"action_bar_settings": "設定",
|
"action_bar_settings": "設定",
|
||||||
"message_bar_type_message": "メッセージを入力してください",
|
"message_bar_type_message": "メッセージを入力してください",
|
||||||
"nav_topics_title": "購読しているトピック",
|
"nav_topics_title": "購読しているトピック",
|
||||||
"nav_button_subscribe": "トピックを購読",
|
"nav_button_subscribe": "トピックを購読",
|
||||||
"alert_grant_description": "ブラウザのデスクトップ通知を許可してください。",
|
"alert_grant_description": "ブラウザのデスクトップ通知を許可してください。",
|
||||||
"alert_grant_button": "許可する",
|
"alert_grant_button": "許可する",
|
||||||
"notifications_attachment_link_expires": "リンクは {{date}} に失効します",
|
"notifications_attachment_link_expires": "リンクは {{date}} に失効します",
|
||||||
"notifications_click_copy_url_button": "リンクをコピー",
|
"notifications_click_copy_url_button": "リンクをコピー",
|
||||||
"notifications_none_for_topic_description": "トピックに通知を送信するには、トピックのURLにPUTかPOSTしてください。",
|
"notifications_none_for_topic_description": "トピックに通知を送信するには、トピックのURLにPUTかPOSTしてください。",
|
||||||
"nav_button_publish_message": "通知を送信",
|
"nav_button_publish_message": "通知を送信",
|
||||||
"alert_grant_title": "通知は無効化されています",
|
"alert_grant_title": "通知は無効化されています",
|
||||||
"alert_not_supported_title": "通知機能はサポートされていません",
|
"alert_not_supported_title": "通知機能はサポートされていません",
|
||||||
"notifications_tags": "タグ",
|
"notifications_tags": "タグ",
|
||||||
"notifications_attachment_copy_url_button": "URLをコピー",
|
"notifications_attachment_copy_url_button": "URLをコピー",
|
||||||
"notifications_attachment_open_title": "{{url}} に移動",
|
"notifications_attachment_open_title": "{{url}} に移動",
|
||||||
"notifications_attachment_link_expired": "ダウンロードリンクは失効しました",
|
"notifications_attachment_link_expired": "ダウンロードリンクは失効しました",
|
||||||
"notifications_actions_open_url_title": "{{url}} に移動",
|
"notifications_actions_open_url_title": "{{url}} に移動",
|
||||||
"notifications_attachment_copy_url_title": "添付URLをクリップボードにコピー",
|
"notifications_attachment_copy_url_title": "添付URLをクリップボードにコピー",
|
||||||
"notifications_attachment_open_button": "添付ファイルを開く",
|
"notifications_attachment_open_button": "添付ファイルを開く",
|
||||||
"notifications_click_copy_url_title": "リンクURLをクリップボードにコピー",
|
"notifications_click_copy_url_title": "リンクURLをクリップボードにコピー",
|
||||||
"notifications_none_for_topic_title": "このトピックではまだ通知を受信していません。",
|
"notifications_none_for_topic_title": "このトピックではまだ通知を受信していません。",
|
||||||
"notifications_no_subscriptions_description": "「{{linktext}}」リンクをクリックしてトピックを作成または購読してください。その後、メッセージをPUTまたはPOSTで送信すると通知が受信できます。",
|
"notifications_no_subscriptions_description": "「{{linktext}}」リンクをクリックしてトピックを作成または購読してください。その後、メッセージをPUTまたはPOSTで送信すると通知が受信できます。",
|
||||||
"publish_dialog_message_label": "メッセージ",
|
"publish_dialog_message_label": "メッセージ",
|
||||||
"publish_dialog_email_label": "メール",
|
"publish_dialog_email_label": "メール",
|
||||||
"notifications_none_for_any_title": "まだ通知を受信していません。",
|
"notifications_none_for_any_title": "まだ通知を受信していません。",
|
||||||
"publish_dialog_priority_max": "優先度 最高",
|
"publish_dialog_priority_max": "優先度 最高",
|
||||||
"publish_dialog_button_cancel_sending": "送信をキャンセル",
|
"publish_dialog_button_cancel_sending": "送信をキャンセル",
|
||||||
"publish_dialog_attach_label": "添付URL",
|
"publish_dialog_attach_label": "添付URL",
|
||||||
"notifications_none_for_any_description": "トピックに通知を送信するには、トピックURLにPUTまたはPOSTしてください。トピックのひとつを利用した例を示します。",
|
"notifications_none_for_any_description": "トピックに通知を送信するには、トピックURLにPUTまたはPOSTしてください。トピックのひとつを利用した例を示します。",
|
||||||
"notifications_no_subscriptions_title": "まだ何も購読していないようです。",
|
"notifications_no_subscriptions_title": "まだ何も購読していないようです。",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "ファイル制限とクォータ {{fileSizeLimit}} を超えました、残り {{remainingBytes}}",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "ファイル制限とクォータ {{fileSizeLimit}} を超えました、残り {{remainingBytes}}",
|
||||||
"publish_dialog_priority_label": "優先度",
|
"publish_dialog_priority_label": "優先度",
|
||||||
"publish_dialog_click_label": "クリックURL",
|
"publish_dialog_click_label": "クリックURL",
|
||||||
"publish_dialog_email_placeholder": "通知を転送するアドレス, 例) phil@example.com",
|
"publish_dialog_email_placeholder": "通知を転送するアドレス, 例) phil@example.com",
|
||||||
"notifications_more_details": "詳しい情報は、<websiteLink>ウェブサイト</websiteLink> または <docsLink>ドキュメント</docsLink> を参照してください。",
|
"notifications_more_details": "詳しい情報は、<websiteLink>ウェブサイト</websiteLink> または <docsLink>ドキュメント</docsLink> を参照してください。",
|
||||||
"publish_dialog_attachment_limits_file_reached": "ファイルサイズ制限 {{fileSizeLimit}} を超えました",
|
"publish_dialog_attachment_limits_file_reached": "ファイルサイズ制限 {{fileSizeLimit}} を超えました",
|
||||||
"publish_dialog_priority_min": "優先度 最低",
|
"publish_dialog_priority_min": "優先度 最低",
|
||||||
"publish_dialog_priority_low": "優先度 低",
|
"publish_dialog_priority_low": "優先度 低",
|
||||||
"publish_dialog_priority_default": "優先度 通常",
|
"publish_dialog_priority_default": "優先度 通常",
|
||||||
"publish_dialog_base_url_label": "サービスURL",
|
"publish_dialog_base_url_label": "サービスURL",
|
||||||
"publish_dialog_other_features": "他の機能:",
|
"publish_dialog_other_features": "他の機能:",
|
||||||
"notifications_loading": "通知を読み込み中…",
|
"notifications_loading": "通知を読み込み中…",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "クォータを超過しました、残り{{remainingBytes}}",
|
"publish_dialog_attachment_limits_quota_reached": "クォータを超過しました、残り{{remainingBytes}}",
|
||||||
"publish_dialog_priority_high": "優先度 高",
|
"publish_dialog_priority_high": "優先度 高",
|
||||||
"publish_dialog_topic_placeholder": "トピック名の例 phil_alerts",
|
"publish_dialog_topic_placeholder": "トピック名の例 phil_alerts",
|
||||||
"publish_dialog_title_placeholder": "通知タイトル 例: ディスクスペース警告",
|
"publish_dialog_title_placeholder": "通知タイトル 例: ディスクスペース警告",
|
||||||
"publish_dialog_message_placeholder": "メッセージ本文を入力してください",
|
"publish_dialog_message_placeholder": "メッセージ本文を入力してください",
|
||||||
"publish_dialog_tags_label": "タグ",
|
"publish_dialog_tags_label": "タグ",
|
||||||
"publish_dialog_tags_placeholder": "コンマ区切りでタグを列挙してください 例: warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "コンマ区切りでタグを列挙してください 例: warning, srv1-backup",
|
||||||
"publish_dialog_topic_label": "トピック名",
|
"publish_dialog_topic_label": "トピック名",
|
||||||
"publish_dialog_delay_label": "遅延",
|
"publish_dialog_delay_label": "遅延",
|
||||||
"publish_dialog_click_placeholder": "通知をクリックしたときに開くURL",
|
"publish_dialog_click_placeholder": "通知をクリックしたときに開くURL",
|
||||||
"publish_dialog_filename_placeholder": "添付ファイルの名称",
|
"publish_dialog_filename_placeholder": "添付ファイルの名称",
|
||||||
"publish_dialog_button_send": "送信",
|
"publish_dialog_button_send": "送信",
|
||||||
"publish_dialog_chip_click_label": "Click URL",
|
"publish_dialog_chip_click_label": "Click URL",
|
||||||
"publish_dialog_chip_email_label": "メールに転送",
|
"publish_dialog_chip_email_label": "メールに転送",
|
||||||
"publish_dialog_details_examples_description": "送信機能の例や詳細な説明については、<docsLink>ドキュメント</docsLink>を参照してください。",
|
"publish_dialog_details_examples_description": "送信機能の例や詳細な説明については、<docsLink>ドキュメント</docsLink>を参照してください。",
|
||||||
"error_boundary_description": "明らかに起きてはならないことです。本当に申し訳ありません。<br/>もし時間があれば、<githubLink>GitHubにこれを報告</githubLink>するか、<discordLink>Discord</discordLink>または<matrixLink>Matrix</matrixLink>で我々に知らせて下さい。",
|
"error_boundary_description": "明らかに起きてはならないことです。本当に申し訳ありません。<br/>もし時間があれば、<githubLink>GitHubにこれを報告</githubLink>するか、<discordLink>Discord</discordLink>または<matrixLink>Matrix</matrixLink>で我々に知らせて下さい。",
|
||||||
"publish_dialog_chip_attach_url_label": "URLでファイルを添付",
|
"publish_dialog_chip_attach_url_label": "URLでファイルを添付",
|
||||||
"publish_dialog_chip_attach_file_label": "ローカルファイルを添付",
|
"publish_dialog_chip_attach_file_label": "ローカルファイルを添付",
|
||||||
"publish_dialog_chip_topic_label": "トピックを変更",
|
"publish_dialog_chip_topic_label": "トピックを変更",
|
||||||
"publish_dialog_chip_delay_label": "配信を遅延させる",
|
"publish_dialog_chip_delay_label": "配信を遅延させる",
|
||||||
"publish_dialog_attached_file_title": "添付ファイル:",
|
"publish_dialog_attached_file_title": "添付ファイル:",
|
||||||
"publish_dialog_button_cancel": "キャンセル",
|
"publish_dialog_button_cancel": "キャンセル",
|
||||||
"publish_dialog_checkbox_publish_another": "送信後開いたままにする",
|
"publish_dialog_checkbox_publish_another": "送信後開いたままにする",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "添付ファイル名",
|
"publish_dialog_attached_file_filename_placeholder": "添付ファイル名",
|
||||||
"emoji_picker_search_placeholder": "絵文字を検索",
|
"emoji_picker_search_placeholder": "絵文字を検索",
|
||||||
"subscribe_dialog_subscribe_title": "トピックを購読",
|
"subscribe_dialog_subscribe_title": "トピックを購読",
|
||||||
"prefs_users_title": "ユーザー管理",
|
"prefs_users_title": "ユーザー管理",
|
||||||
"publish_dialog_drop_file_here": "ここにファイルをドロップしてください",
|
"publish_dialog_drop_file_here": "ここにファイルをドロップしてください",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "トピック名 例: phils_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "トピック名 例: phils_alerts",
|
||||||
"prefs_notifications_min_priority_any": "全ての優先度",
|
"prefs_notifications_min_priority_any": "全ての優先度",
|
||||||
"prefs_notifications_delete_after_three_hours": "3時間後",
|
"prefs_notifications_delete_after_three_hours": "3時間後",
|
||||||
"prefs_users_description": "保護トピックのユーザーを追加/削除できます。ユーザー名とパスワードはブラウザのローカルストレージに保存されることに留意してください。",
|
"prefs_users_description": "保護トピックのユーザーを追加/削除できます。ユーザー名とパスワードはブラウザのローカルストレージに保存されることに留意してください。",
|
||||||
"prefs_users_add_button": "ユーザー追加",
|
"prefs_users_add_button": "ユーザー追加",
|
||||||
"prefs_users_dialog_button_add": "追加",
|
"prefs_users_dialog_button_add": "追加",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "他のサーバーを使用",
|
"subscribe_dialog_subscribe_use_another_label": "他のサーバーを使用",
|
||||||
"subscribe_dialog_error_user_not_authorized": "ユーザー名 {{username}} は許可されていません",
|
"subscribe_dialog_error_user_not_authorized": "ユーザー名 {{username}} は許可されていません",
|
||||||
"prefs_notifications_delete_after_one_week": "1週間後",
|
"prefs_notifications_delete_after_one_week": "1週間後",
|
||||||
"prefs_notifications_delete_after_one_month": "1か月後",
|
"prefs_notifications_delete_after_one_month": "1か月後",
|
||||||
"subscribe_dialog_subscribe_description": "トピックはパスワード保護されないので、推測されにくい名前にしてください。購読した後、PUT/POSTで通知を送信できます。",
|
"subscribe_dialog_subscribe_description": "トピックはパスワード保護されないので、推測されにくい名前にしてください。購読した後、PUT/POSTで通知を送信できます。",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "キャンセル",
|
"subscribe_dialog_subscribe_button_cancel": "キャンセル",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "購読",
|
"subscribe_dialog_subscribe_button_subscribe": "購読",
|
||||||
"subscribe_dialog_login_title": "ログインが必要です",
|
"subscribe_dialog_login_title": "ログインが必要です",
|
||||||
"subscribe_dialog_error_user_anonymous": "匿名",
|
"subscribe_dialog_error_user_anonymous": "匿名",
|
||||||
"prefs_notifications_title": "通知",
|
"prefs_notifications_title": "通知",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "優先度低 およびそれ以上",
|
"prefs_notifications_min_priority_low_and_higher": "優先度低 およびそれ以上",
|
||||||
"prefs_notifications_delete_after_never": "削除しない",
|
"prefs_notifications_delete_after_never": "削除しない",
|
||||||
"prefs_notifications_delete_after_one_day": "1日後",
|
"prefs_notifications_delete_after_one_day": "1日後",
|
||||||
"prefs_notifications_sound_title": "通知音",
|
"prefs_notifications_sound_title": "通知音",
|
||||||
"prefs_notifications_sound_no_sound": "サウンドなし",
|
"prefs_notifications_sound_no_sound": "サウンドなし",
|
||||||
"prefs_notifications_min_priority_title": "表示する優先度",
|
"prefs_notifications_min_priority_title": "表示する優先度",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "優先度通常 およびそれ以上",
|
"prefs_notifications_min_priority_default_and_higher": "優先度通常 およびそれ以上",
|
||||||
"prefs_notifications_delete_after_title": "通知を削除",
|
"prefs_notifications_delete_after_title": "通知を削除",
|
||||||
"prefs_users_dialog_button_cancel": "キャンセル",
|
"prefs_users_dialog_button_cancel": "キャンセル",
|
||||||
"prefs_users_dialog_button_save": "保存",
|
"prefs_users_dialog_button_save": "保存",
|
||||||
"prefs_users_table_user_header": "ユーザー名",
|
"prefs_users_table_user_header": "ユーザー名",
|
||||||
"prefs_users_dialog_title_add": "ユーザー追加",
|
"prefs_users_dialog_title_add": "ユーザー追加",
|
||||||
"prefs_users_dialog_title_edit": "ユーザー編集",
|
"prefs_users_dialog_title_edit": "ユーザー編集",
|
||||||
"prefs_users_dialog_base_url_label": "サービスURL, 例) https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "サービスURL, 例) https://ntfy.sh",
|
||||||
"prefs_appearance_title": "外観",
|
"prefs_appearance_title": "外観",
|
||||||
"prefs_appearance_language_title": "言語",
|
"prefs_appearance_language_title": "言語",
|
||||||
"prefs_users_table_base_url_header": "サービスURL",
|
"prefs_users_table_base_url_header": "サービスURL",
|
||||||
"prefs_users_dialog_username_label": "ユーザー名, 例) phil",
|
"prefs_users_dialog_username_label": "ユーザー名, 例) phil",
|
||||||
"prefs_users_dialog_password_label": "パスワード",
|
"prefs_users_dialog_password_label": "パスワード",
|
||||||
"error_boundary_title": "おっと、ntfyがクラッシュしました",
|
"error_boundary_title": "おっと、ntfyがクラッシュしました",
|
||||||
"error_boundary_button_copy_stack_trace": "スタックトレースをコピー",
|
"error_boundary_button_copy_stack_trace": "スタックトレースをコピー",
|
||||||
"error_boundary_stack_trace": "スタックトレース",
|
"error_boundary_stack_trace": "スタックトレース",
|
||||||
"error_boundary_gathering_info": "更に情報を集める…",
|
"error_boundary_gathering_info": "更に情報を集める…",
|
||||||
"publish_dialog_base_url_placeholder": "サービスURL, 例) https://example.com",
|
"publish_dialog_base_url_placeholder": "サービスURL, 例) https://example.com",
|
||||||
"publish_dialog_attach_placeholder": "添付ファイルをURLで指定, 例) https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "添付ファイルをURLで指定, 例) https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_delay_placeholder": "遅延時間, 例) {{unixTimestamp}}, {{relativeTime}}, or \"{{naturalLanguage}}\" (English only)",
|
"publish_dialog_delay_placeholder": "遅延時間, 例) {{unixTimestamp}}, {{relativeTime}}, or \"{{naturalLanguage}}\" (English only)",
|
||||||
"prefs_notifications_sound_description_none": "通知受信時に音を鳴らしません",
|
"prefs_notifications_sound_description_none": "通知受信時に音を鳴らしません",
|
||||||
"prefs_notifications_sound_description_some": "通知受信時に {{sound}} を鳴らします",
|
"prefs_notifications_sound_description_some": "通知受信時に {{sound}} を鳴らします",
|
||||||
"prefs_notifications_min_priority_description_any": "優先度に関係なく全ての通知を表示します",
|
"prefs_notifications_min_priority_description_any": "優先度に関係なく全ての通知を表示します",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "優先度が {{number}} ({{name}}) 以上の時に通知を表示します",
|
"prefs_notifications_min_priority_description_x_or_higher": "優先度が {{number}} ({{name}}) 以上の時に通知を表示します",
|
||||||
"prefs_notifications_delete_after_never_description": "通知は自動的に削除されません",
|
"prefs_notifications_delete_after_never_description": "通知は自動的に削除されません",
|
||||||
"prefs_notifications_delete_after_one_day_description": "通知は1日後に自動的に削除されます",
|
"prefs_notifications_delete_after_one_day_description": "通知は1日後に自動的に削除されます",
|
||||||
"prefs_notifications_delete_after_one_week_description": "通知は1週間後に自動的に削除されます",
|
"prefs_notifications_delete_after_one_week_description": "通知は1週間後に自動的に削除されます",
|
||||||
"prefs_notifications_delete_after_one_month_description": "通知は1か月後に自動的に削除されます",
|
"prefs_notifications_delete_after_one_month_description": "通知は1か月後に自動的に削除されます",
|
||||||
"priority_high": "高",
|
"priority_high": "高",
|
||||||
"priority_max": "最高",
|
"priority_max": "最高",
|
||||||
"prefs_notifications_min_priority_description_max": "優先度が 5 (最高) の時にのみ通知を表示します",
|
"prefs_notifications_min_priority_description_max": "優先度が 5 (最高) の時にのみ通知を表示します",
|
||||||
"priority_default": "通常",
|
"priority_default": "通常",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "通知は3時間後に自動的に削除されます",
|
"prefs_notifications_delete_after_three_hours_description": "通知は3時間後に自動的に削除されます",
|
||||||
"priority_low": "低",
|
"priority_low": "低",
|
||||||
"priority_min": "最低",
|
"priority_min": "最低",
|
||||||
"notifications_actions_not_supported": "このアクションはWebアプリではサポートされていません",
|
"notifications_actions_not_supported": "このアクションはWebアプリではサポートされていません",
|
||||||
"notifications_actions_http_request_title": "{{url}}にHTTP {{method}}を送信",
|
"notifications_actions_http_request_title": "{{url}}にHTTP {{method}}を送信",
|
||||||
"prefs_users_edit_button": "ユーザーを編集",
|
"prefs_users_edit_button": "ユーザーを編集",
|
||||||
"publish_dialog_attached_file_remove": "添付ファイルを削除",
|
"publish_dialog_attached_file_remove": "添付ファイルを削除",
|
||||||
"error_boundary_unsupported_indexeddb_description": "nfty webアプリは動作にIndexedDBを使用しますが、あなたのブラウザはプライベートブラウジングモード時にIndexedDBをサポートしていません。<br/><br/>これは残念なことですが、ntfy webアプリは全ての情報をブラウザストレージに保存して動作するため、プライベートブラウジングモードで利用するのはあまり意味がないかも知れません。詳細については <githubLink>GitHub issue</githubLink>を参照するか、<discordLink>Discord</discordLink>や<matrixLink>Matrix</matrixLink>の議論に参加してください。",
|
"error_boundary_unsupported_indexeddb_description": "nfty webアプリは動作にIndexedDBを使用しますが、あなたのブラウザはプライベートブラウジングモード時にIndexedDBをサポートしていません。<br/><br/>これは残念なことですが、ntfy webアプリは全ての情報をブラウザストレージに保存して動作するため、プライベートブラウジングモードで利用するのはあまり意味がないかも知れません。詳細については <githubLink>GitHub issue</githubLink>を参照するか、<discordLink>Discord</discordLink>や<matrixLink>Matrix</matrixLink>の議論に参加してください。",
|
||||||
"action_bar_show_menu": "メニューを表示",
|
"action_bar_show_menu": "メニューを表示",
|
||||||
"action_bar_logo_alt": "ntfyロゴ",
|
"action_bar_logo_alt": "ntfyロゴ",
|
||||||
"action_bar_toggle_mute": "通知をミュート/解除",
|
"action_bar_toggle_mute": "通知をミュート/解除",
|
||||||
"action_bar_toggle_action_menu": "動作メニューを開く/閉じる",
|
"action_bar_toggle_action_menu": "動作メニューを開く/閉じる",
|
||||||
"message_bar_show_dialog": "送信ダイアログを表示",
|
"message_bar_show_dialog": "送信ダイアログを表示",
|
||||||
"message_bar_publish": "メッセージを送信",
|
"message_bar_publish": "メッセージを送信",
|
||||||
"nav_button_muted": "ミュートされた通知",
|
"nav_button_muted": "ミュートされた通知",
|
||||||
"nav_button_connecting": "接続中",
|
"nav_button_connecting": "接続中",
|
||||||
"notifications_list": "通知一覧",
|
"notifications_list": "通知一覧",
|
||||||
"notifications_new_indicator": "新しい通知",
|
"notifications_new_indicator": "新しい通知",
|
||||||
"notifications_list_item": "通知",
|
"notifications_list_item": "通知",
|
||||||
"notifications_mark_read": "既読にする",
|
"notifications_mark_read": "既読にする",
|
||||||
"notifications_delete": "削除",
|
"notifications_delete": "削除",
|
||||||
"notifications_priority_x": "優先度 {{priority}}",
|
"notifications_priority_x": "優先度 {{priority}}",
|
||||||
"notifications_attachment_image": "添付画像",
|
"notifications_attachment_image": "添付画像",
|
||||||
"notifications_attachment_file_image": "画像ファイル",
|
"notifications_attachment_file_image": "画像ファイル",
|
||||||
"notifications_attachment_file_video": "動画ファイル",
|
"notifications_attachment_file_video": "動画ファイル",
|
||||||
"notifications_attachment_file_audio": "音声ファイル",
|
"notifications_attachment_file_audio": "音声ファイル",
|
||||||
"notifications_attachment_file_app": "Androidアプリファイル",
|
"notifications_attachment_file_app": "Androidアプリファイル",
|
||||||
"notifications_attachment_file_document": "その他文書",
|
"notifications_attachment_file_document": "その他文書",
|
||||||
"publish_dialog_emoji_picker_show": "絵文字",
|
"publish_dialog_emoji_picker_show": "絵文字",
|
||||||
"publish_dialog_topic_reset": "トピックをリセット",
|
"publish_dialog_topic_reset": "トピックをリセット",
|
||||||
"publish_dialog_click_reset": "クリックURLを削除",
|
"publish_dialog_click_reset": "クリックURLを削除",
|
||||||
"publish_dialog_email_reset": "メール転送を削除",
|
"publish_dialog_email_reset": "メール転送を削除",
|
||||||
"publish_dialog_attach_reset": "添付URLを削除",
|
"publish_dialog_attach_reset": "添付URLを削除",
|
||||||
"publish_dialog_delay_reset": "配信遅延を削除",
|
"publish_dialog_delay_reset": "配信遅延を削除",
|
||||||
"emoji_picker_search_clear": "検索をクリア",
|
"emoji_picker_search_clear": "検索をクリア",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "サーバーURL",
|
"subscribe_dialog_subscribe_base_url_label": "サーバーURL",
|
||||||
"prefs_notifications_sound_play": "選択されたサウンドを再生",
|
"prefs_notifications_sound_play": "選択されたサウンドを再生",
|
||||||
"prefs_users_table": "ユーザー一覧",
|
"prefs_users_table": "ユーザー一覧",
|
||||||
"prefs_users_delete_button": "ユーザーを削除",
|
"prefs_users_delete_button": "ユーザーを削除",
|
||||||
"error_boundary_unsupported_indexeddb_title": "プライベートブラウジングはサポートされていません"
|
"error_boundary_unsupported_indexeddb_title": "プライベートブラウジングはサポートされていません"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_show_menu": "메뉴 표시",
|
"action_bar_show_menu": "메뉴 표시",
|
||||||
"action_bar_logo_alt": "ntfy 로고",
|
"action_bar_logo_alt": "ntfy 로고",
|
||||||
"action_bar_settings": "설정",
|
"action_bar_settings": "설정",
|
||||||
"action_bar_send_test_notification": "시험용 알림 발송",
|
"action_bar_send_test_notification": "시험용 알림 발송",
|
||||||
"action_bar_clear_notifications": "모든 알림 초기화",
|
"action_bar_clear_notifications": "모든 알림 초기화",
|
||||||
"action_bar_unsubscribe": "구독 해제",
|
"action_bar_unsubscribe": "구독 해제",
|
||||||
"action_bar_toggle_mute": "알림 음소거/해제",
|
"action_bar_toggle_mute": "알림 음소거/해제",
|
||||||
"action_bar_toggle_action_menu": "액션 메뉴 열기/닫기",
|
"action_bar_toggle_action_menu": "액션 메뉴 열기/닫기",
|
||||||
"message_bar_type_message": "여기에 메세지를 입력하세요",
|
"message_bar_type_message": "여기에 메세지를 입력하세요",
|
||||||
"message_bar_error_publishing": "메세지 발송 오류",
|
"message_bar_error_publishing": "메세지 발송 오류",
|
||||||
"message_bar_show_dialog": "발송 창 표시",
|
"message_bar_show_dialog": "발송 창 표시",
|
||||||
"message_bar_publish": "메세지 발송",
|
"message_bar_publish": "메세지 발송",
|
||||||
"nav_topics_title": "구독한 주제",
|
"nav_topics_title": "구독한 주제",
|
||||||
"nav_button_all_notifications": "모든 알림",
|
"nav_button_all_notifications": "모든 알림",
|
||||||
"nav_button_publish_message": "알림 보내기",
|
"nav_button_publish_message": "알림 보내기",
|
||||||
"nav_button_subscribe": "주제 구독하기",
|
"nav_button_subscribe": "주제 구독하기",
|
||||||
"nav_button_muted": "알림 음소거됨",
|
"nav_button_muted": "알림 음소거됨",
|
||||||
"nav_button_connecting": "연결중",
|
"nav_button_connecting": "연결중",
|
||||||
"alert_grant_title": "알림이 비활성화되어 있습니다",
|
"alert_grant_title": "알림이 비활성화되어 있습니다",
|
||||||
"alert_grant_description": "데스크톱 알림을 받기 위해서는 브라우저에서 권한을 부여해야 합니다.",
|
"alert_grant_description": "데스크톱 알림을 받기 위해서는 브라우저에서 권한을 부여해야 합니다.",
|
||||||
"alert_grant_button": "권한 부여하기",
|
"alert_grant_button": "권한 부여하기",
|
||||||
"alert_not_supported_title": "알림이 지원되지 않습니다",
|
"alert_not_supported_title": "알림이 지원되지 않습니다",
|
||||||
"notifications_list_item": "알림",
|
"notifications_list_item": "알림",
|
||||||
"notifications_mark_read": "읽음으로 표시",
|
"notifications_mark_read": "읽음으로 표시",
|
||||||
"notifications_delete": "삭제",
|
"notifications_delete": "삭제",
|
||||||
"notifications_copied_to_clipboard": "클립보드에 복사됨",
|
"notifications_copied_to_clipboard": "클립보드에 복사됨",
|
||||||
"notifications_tags": "태그",
|
"notifications_tags": "태그",
|
||||||
"notifications_priority_x": "우선순위 {{priority}}",
|
"notifications_priority_x": "우선순위 {{priority}}",
|
||||||
"notifications_new_indicator": "새 알림",
|
"notifications_new_indicator": "새 알림",
|
||||||
"notifications_attachment_image": "첨부 이미지",
|
"notifications_attachment_image": "첨부 이미지",
|
||||||
"notifications_attachment_copy_url_title": "첨부 주소를 클립보드에 복사",
|
"notifications_attachment_copy_url_title": "첨부 주소를 클립보드에 복사",
|
||||||
"notifications_attachment_copy_url_button": "URL 복사",
|
"notifications_attachment_copy_url_button": "URL 복사",
|
||||||
"notifications_attachment_open_title": "{{url}}로 가기",
|
"notifications_attachment_open_title": "{{url}}로 가기",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "첨부파일 크기 제한({{fileSizeLimit}}) 초과 및 할당량 초과({{remainingBytes}} 남음)",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "첨부파일 크기 제한({{fileSizeLimit}}) 초과 및 할당량 초과({{remainingBytes}} 남음)",
|
||||||
"publish_dialog_attachment_limits_file_reached": "첨부파일 크기 제한({{fileSizeLimit}}) 초과",
|
"publish_dialog_attachment_limits_file_reached": "첨부파일 크기 제한({{fileSizeLimit}}) 초과",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "할당량 초과({{remainingBytes}} 남음)",
|
"publish_dialog_attachment_limits_quota_reached": "할당량 초과({{remainingBytes}} 남음)",
|
||||||
"publish_dialog_emoji_picker_show": "이모지 선택",
|
"publish_dialog_emoji_picker_show": "이모지 선택",
|
||||||
"publish_dialog_priority_min": "우선순위 최소",
|
"publish_dialog_priority_min": "우선순위 최소",
|
||||||
"publish_dialog_priority_low": "우선순위 낮음",
|
"publish_dialog_priority_low": "우선순위 낮음",
|
||||||
"publish_dialog_priority_default": "우선순위 기본",
|
"publish_dialog_priority_default": "우선순위 기본",
|
||||||
"publish_dialog_priority_high": "우선순위 높음",
|
"publish_dialog_priority_high": "우선순위 높음",
|
||||||
"publish_dialog_priority_max": "우선순위 최상",
|
"publish_dialog_priority_max": "우선순위 최상",
|
||||||
"publish_dialog_base_url_label": "서비스 URL",
|
"publish_dialog_base_url_label": "서비스 URL",
|
||||||
"publish_dialog_base_url_placeholder": "서비스 URL, 예를 들면 https://example.com",
|
"publish_dialog_base_url_placeholder": "서비스 URL, 예를 들면 https://example.com",
|
||||||
"publish_dialog_topic_label": "주제 이름",
|
"publish_dialog_topic_label": "주제 이름",
|
||||||
"publish_dialog_topic_placeholder": "주제 이름, 예를 들면 phil_alerts",
|
"publish_dialog_topic_placeholder": "주제 이름, 예를 들면 phil_alerts",
|
||||||
"publish_dialog_topic_reset": "주제 초기화",
|
"publish_dialog_topic_reset": "주제 초기화",
|
||||||
"publish_dialog_title_label": "제목",
|
"publish_dialog_title_label": "제목",
|
||||||
"publish_dialog_title_placeholder": "알림 제목, 예를 들면 디스크 공간 경고",
|
"publish_dialog_title_placeholder": "알림 제목, 예를 들면 디스크 공간 경고",
|
||||||
"publish_dialog_message_label": "메세지",
|
"publish_dialog_message_label": "메세지",
|
||||||
"publish_dialog_message_placeholder": "메세지를 여기에 입력하세요",
|
"publish_dialog_message_placeholder": "메세지를 여기에 입력하세요",
|
||||||
"publish_dialog_tags_label": "태그",
|
"publish_dialog_tags_label": "태그",
|
||||||
"publish_dialog_tags_placeholder": "반점으로 구분된 태그 목록, 예를 들면 warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "반점으로 구분된 태그 목록, 예를 들면 warning, srv1-backup",
|
||||||
"publish_dialog_priority_label": "우선순위",
|
"publish_dialog_priority_label": "우선순위",
|
||||||
"publish_dialog_click_label": "클릭 URL",
|
"publish_dialog_click_label": "클릭 URL",
|
||||||
"publish_dialog_click_placeholder": "알림이 클릭되었을때 이동할 URL",
|
"publish_dialog_click_placeholder": "알림이 클릭되었을때 이동할 URL",
|
||||||
"publish_dialog_click_reset": "클릭 URL 제거",
|
"publish_dialog_click_reset": "클릭 URL 제거",
|
||||||
"publish_dialog_email_label": "이메일",
|
"publish_dialog_email_label": "이메일",
|
||||||
"publish_dialog_email_placeholder": "알림을 전달할 이메일 주소, 예를 들면 phil@example.com",
|
"publish_dialog_email_placeholder": "알림을 전달할 이메일 주소, 예를 들면 phil@example.com",
|
||||||
"publish_dialog_email_reset": "이메일 전달 삭제",
|
"publish_dialog_email_reset": "이메일 전달 삭제",
|
||||||
"publish_dialog_attach_label": "첨부 파일 URL",
|
"publish_dialog_attach_label": "첨부 파일 URL",
|
||||||
"publish_dialog_attach_placeholder": "파일을 URL로 첨부하기, 예를 들면 https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "파일을 URL로 첨부하기, 예를 들면 https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_attach_reset": "첨부 파일 URL 삭제",
|
"publish_dialog_attach_reset": "첨부 파일 URL 삭제",
|
||||||
"publish_dialog_filename_label": "파일 이름",
|
"publish_dialog_filename_label": "파일 이름",
|
||||||
"publish_dialog_filename_placeholder": "첨부 파일 이름",
|
"publish_dialog_filename_placeholder": "첨부 파일 이름",
|
||||||
"publish_dialog_delay_label": "지연",
|
"publish_dialog_delay_label": "지연",
|
||||||
"publish_dialog_chip_email_label": "이메일로 전달",
|
"publish_dialog_chip_email_label": "이메일로 전달",
|
||||||
"publish_dialog_chip_attach_url_label": "URL로 파일 첨부",
|
"publish_dialog_chip_attach_url_label": "URL로 파일 첨부",
|
||||||
"publish_dialog_chip_attach_file_label": "로컬 파일 첨부",
|
"publish_dialog_chip_attach_file_label": "로컬 파일 첨부",
|
||||||
"publish_dialog_chip_delay_label": "발송 지연",
|
"publish_dialog_chip_delay_label": "발송 지연",
|
||||||
"publish_dialog_chip_topic_label": "주제 변경",
|
"publish_dialog_chip_topic_label": "주제 변경",
|
||||||
"publish_dialog_details_examples_description": "예제와 모든 전송 기능의 자세한 설명은 <docsLink>문서</docsLink>를 참고해주세요.",
|
"publish_dialog_details_examples_description": "예제와 모든 전송 기능의 자세한 설명은 <docsLink>문서</docsLink>를 참고해주세요.",
|
||||||
"publish_dialog_button_cancel": "취소",
|
"publish_dialog_button_cancel": "취소",
|
||||||
"publish_dialog_button_send": "보내기",
|
"publish_dialog_button_send": "보내기",
|
||||||
"publish_dialog_button_cancel_sending": "보내기 취소",
|
"publish_dialog_button_cancel_sending": "보내기 취소",
|
||||||
"publish_dialog_checkbox_publish_another": "다른 메세지 보내기",
|
"publish_dialog_checkbox_publish_another": "다른 메세지 보내기",
|
||||||
"publish_dialog_attached_file_title": "첨부된 파일:",
|
"publish_dialog_attached_file_title": "첨부된 파일:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "첨부 파일 이름",
|
"publish_dialog_attached_file_filename_placeholder": "첨부 파일 이름",
|
||||||
"publish_dialog_attached_file_remove": "첨부 파일 삭제",
|
"publish_dialog_attached_file_remove": "첨부 파일 삭제",
|
||||||
"publish_dialog_drop_file_here": "여기에 파일을 끌어다 놓으세요",
|
"publish_dialog_drop_file_here": "여기에 파일을 끌어다 놓으세요",
|
||||||
"emoji_picker_search_placeholder": "이모지 검색",
|
"emoji_picker_search_placeholder": "이모지 검색",
|
||||||
"emoji_picker_search_clear": "검색 초기화",
|
"emoji_picker_search_clear": "검색 초기화",
|
||||||
"subscribe_dialog_subscribe_title": "주제 구독하기",
|
"subscribe_dialog_subscribe_title": "주제 구독하기",
|
||||||
"subscribe_dialog_subscribe_description": "주제는 비밀번호로 보호되지 않을 수 있으니 추측하기 어려운 이름을 사용하십시오. 구독한 뒤 PUT/POST 알림을 보낼 수 있습니다.",
|
"subscribe_dialog_subscribe_description": "주제는 비밀번호로 보호되지 않을 수 있으니 추측하기 어려운 이름을 사용하십시오. 구독한 뒤 PUT/POST 알림을 보낼 수 있습니다.",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "주제 이름, 예를 들면 phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "주제 이름, 예를 들면 phil_alerts",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "다른 서버 사용",
|
"subscribe_dialog_subscribe_use_another_label": "다른 서버 사용",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "서비스 URL",
|
"subscribe_dialog_subscribe_base_url_label": "서비스 URL",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "취소",
|
"subscribe_dialog_subscribe_button_cancel": "취소",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "구독하기",
|
"subscribe_dialog_subscribe_button_subscribe": "구독하기",
|
||||||
"subscribe_dialog_login_title": "로그인 필요함",
|
"subscribe_dialog_login_title": "로그인 필요함",
|
||||||
"subscribe_dialog_error_user_anonymous": "익명",
|
"subscribe_dialog_error_user_anonymous": "익명",
|
||||||
"subscribe_dialog_error_user_not_authorized": "사용자 {{username}} 은(는) 인증되지 않았습니다",
|
"subscribe_dialog_error_user_not_authorized": "사용자 {{username}} 은(는) 인증되지 않았습니다",
|
||||||
"subscribe_dialog_login_username_label": "사용자 이름, 예를 들면 phil",
|
"subscribe_dialog_login_username_label": "사용자 이름, 예를 들면 phil",
|
||||||
"subscribe_dialog_login_password_label": "비밀번호",
|
"subscribe_dialog_login_password_label": "비밀번호",
|
||||||
"subscribe_dialog_login_button_back": "뒤로가기",
|
"subscribe_dialog_login_button_back": "뒤로가기",
|
||||||
"subscribe_dialog_login_button_login": "로그인",
|
"subscribe_dialog_login_button_login": "로그인",
|
||||||
"prefs_notifications_title": "알림",
|
"prefs_notifications_title": "알림",
|
||||||
"prefs_notifications_sound_title": "알림 효과음",
|
"prefs_notifications_sound_title": "알림 효과음",
|
||||||
"prefs_notifications_sound_description_none": "알림 도착시 효과음을 재생하지 않습니다",
|
"prefs_notifications_sound_description_none": "알림 도착시 효과음을 재생하지 않습니다",
|
||||||
"prefs_notifications_sound_description_some": "알림 도착시 {{sound}} 효과음이 재생됩니다",
|
"prefs_notifications_sound_description_some": "알림 도착시 {{sound}} 효과음이 재생됩니다",
|
||||||
"prefs_notifications_sound_no_sound": "효과음 없음",
|
"prefs_notifications_sound_no_sound": "효과음 없음",
|
||||||
"prefs_notifications_sound_play": "선택한 효과음 재생",
|
"prefs_notifications_sound_play": "선택한 효과음 재생",
|
||||||
"prefs_notifications_min_priority_title": "우선순위 최소",
|
"prefs_notifications_min_priority_title": "우선순위 최소",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "우선순위가 {{number}} ({{name}}) 이상인 알림만 보기",
|
"prefs_notifications_min_priority_description_x_or_higher": "우선순위가 {{number}} ({{name}}) 이상인 알림만 보기",
|
||||||
"prefs_notifications_min_priority_description_max": "우선순위가 5 (최상)인 알림만 보기",
|
"prefs_notifications_min_priority_description_max": "우선순위가 5 (최상)인 알림만 보기",
|
||||||
"prefs_notifications_min_priority_any": "아무 우선순위",
|
"prefs_notifications_min_priority_any": "아무 우선순위",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "우선순위 기본 이상",
|
"prefs_notifications_min_priority_default_and_higher": "우선순위 기본 이상",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "우선순위 낮음 이상",
|
"prefs_notifications_min_priority_low_and_higher": "우선순위 낮음 이상",
|
||||||
"prefs_notifications_delete_after_three_hours": "3시간 뒤",
|
"prefs_notifications_delete_after_three_hours": "3시간 뒤",
|
||||||
"prefs_notifications_delete_after_one_day": "1일 뒤",
|
"prefs_notifications_delete_after_one_day": "1일 뒤",
|
||||||
"prefs_notifications_delete_after_one_week": "1주 뒤",
|
"prefs_notifications_delete_after_one_week": "1주 뒤",
|
||||||
"prefs_notifications_delete_after_one_month": "1달 뒤",
|
"prefs_notifications_delete_after_one_month": "1달 뒤",
|
||||||
"prefs_notifications_delete_after_never_description": "알림이 자동으로 삭제되지 않습니다",
|
"prefs_notifications_delete_after_never_description": "알림이 자동으로 삭제되지 않습니다",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "알림이 3시간 뒤 자동으로 삭제됩니다",
|
"prefs_notifications_delete_after_three_hours_description": "알림이 3시간 뒤 자동으로 삭제됩니다",
|
||||||
"prefs_notifications_delete_after_one_day_description": "알림이 1일 뒤 자동으로 삭제됩니다",
|
"prefs_notifications_delete_after_one_day_description": "알림이 1일 뒤 자동으로 삭제됩니다",
|
||||||
"prefs_notifications_delete_after_one_week_description": "알림이 1주 뒤 자동으로 삭제됩니다",
|
"prefs_notifications_delete_after_one_week_description": "알림이 1주 뒤 자동으로 삭제됩니다",
|
||||||
"prefs_notifications_delete_after_one_month_description": "알림이 1달 뒤 자동으로 삭제됩니다",
|
"prefs_notifications_delete_after_one_month_description": "알림이 1달 뒤 자동으로 삭제됩니다",
|
||||||
"prefs_users_title": "사용자 관리",
|
"prefs_users_title": "사용자 관리",
|
||||||
"prefs_users_description": "이곳에서 보호된 주제를 위한 사용자를 추가하거나 삭제할 수 있습니다. 사용자 이름과 비밀번호는 브라우저의 로컬 저장소에 보관됩니다.",
|
"prefs_users_description": "이곳에서 보호된 주제를 위한 사용자를 추가하거나 삭제할 수 있습니다. 사용자 이름과 비밀번호는 브라우저의 로컬 저장소에 보관됩니다.",
|
||||||
"prefs_users_add_button": "사용자 추가",
|
"prefs_users_add_button": "사용자 추가",
|
||||||
"prefs_users_edit_button": "사용자 편집",
|
"prefs_users_edit_button": "사용자 편집",
|
||||||
"prefs_users_delete_button": "사용자 삭제",
|
"prefs_users_delete_button": "사용자 삭제",
|
||||||
"prefs_users_table_user_header": "사용자",
|
"prefs_users_table_user_header": "사용자",
|
||||||
"prefs_users_table_base_url_header": "서비스 URL",
|
"prefs_users_table_base_url_header": "서비스 URL",
|
||||||
"prefs_users_dialog_title_add": "사용자 추가",
|
"prefs_users_dialog_title_add": "사용자 추가",
|
||||||
"prefs_users_dialog_title_edit": "사용자 편집",
|
"prefs_users_dialog_title_edit": "사용자 편집",
|
||||||
"prefs_users_dialog_base_url_label": "서비스 URL, 예를 들면 https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "서비스 URL, 예를 들면 https://ntfy.sh",
|
||||||
"prefs_users_dialog_button_cancel": "취소",
|
"prefs_users_dialog_button_cancel": "취소",
|
||||||
"prefs_users_dialog_button_save": "저장",
|
"prefs_users_dialog_button_save": "저장",
|
||||||
"prefs_appearance_title": "표시 설정",
|
"prefs_appearance_title": "표시 설정",
|
||||||
"prefs_users_dialog_button_add": "추가",
|
"prefs_users_dialog_button_add": "추가",
|
||||||
"prefs_appearance_language_title": "언어",
|
"prefs_appearance_language_title": "언어",
|
||||||
"priority_min": "최하",
|
"priority_min": "최하",
|
||||||
"priority_low": "낮음",
|
"priority_low": "낮음",
|
||||||
"priority_default": "기본",
|
"priority_default": "기본",
|
||||||
"priority_high": "높음",
|
"priority_high": "높음",
|
||||||
"error_boundary_title": "이런, ntfy가 충돌했습니다",
|
"error_boundary_title": "이런, ntfy가 충돌했습니다",
|
||||||
"error_boundary_button_copy_stack_trace": "스택 트레이스 복사",
|
"error_boundary_button_copy_stack_trace": "스택 트레이스 복사",
|
||||||
"error_boundary_stack_trace": "스택 트레이스",
|
"error_boundary_stack_trace": "스택 트레이스",
|
||||||
"error_boundary_gathering_info": "더 많은 정보 모으기 …",
|
"error_boundary_gathering_info": "더 많은 정보 모으기 …",
|
||||||
"error_boundary_unsupported_indexeddb_title": "시크릿 모드는 지원되지 않습니다",
|
"error_boundary_unsupported_indexeddb_title": "시크릿 모드는 지원되지 않습니다",
|
||||||
"notifications_click_copy_url_button": "링크 복사",
|
"notifications_click_copy_url_button": "링크 복사",
|
||||||
"notifications_click_copy_url_title": "링크 URL을 클립보드에 복사",
|
"notifications_click_copy_url_title": "링크 URL을 클립보드에 복사",
|
||||||
"notifications_attachment_file_video": "동영상 파일",
|
"notifications_attachment_file_video": "동영상 파일",
|
||||||
"notifications_attachment_file_app": "안드로이드 앱 파일",
|
"notifications_attachment_file_app": "안드로이드 앱 파일",
|
||||||
"notifications_attachment_file_document": "다른 문서",
|
"notifications_attachment_file_document": "다른 문서",
|
||||||
"notifications_click_open_button": "링크 열기",
|
"notifications_click_open_button": "링크 열기",
|
||||||
"notifications_actions_not_supported": "웹앱에서 지원되지 않는 동작입니다",
|
"notifications_actions_not_supported": "웹앱에서 지원되지 않는 동작입니다",
|
||||||
"publish_dialog_title_topic": "{{topic}}에 발송",
|
"publish_dialog_title_topic": "{{topic}}에 발송",
|
||||||
"alert_not_supported_description": "사용중인 브라우저에서 알림 기능을 지원하지 않습니다.",
|
"alert_not_supported_description": "사용중인 브라우저에서 알림 기능을 지원하지 않습니다.",
|
||||||
"notifications_example": "예제",
|
"notifications_example": "예제",
|
||||||
"notifications_more_details": "더 많은 정보가 필요하시다면 <websiteLink>웹사이트</websiteLink>나 <docsLink>문서</docsLink>를 참고하세요.",
|
"notifications_more_details": "더 많은 정보가 필요하시다면 <websiteLink>웹사이트</websiteLink>나 <docsLink>문서</docsLink>를 참고하세요.",
|
||||||
"notifications_list": "알림 목록",
|
"notifications_list": "알림 목록",
|
||||||
"notifications_attachment_open_button": "첨부 파일 열기",
|
"notifications_attachment_open_button": "첨부 파일 열기",
|
||||||
"notifications_no_subscriptions_title": "아직 아무런 구독을 추가하지 않으신 것 같습니다.",
|
"notifications_no_subscriptions_title": "아직 아무런 구독을 추가하지 않으신 것 같습니다.",
|
||||||
"nav_button_settings": "설정",
|
"nav_button_settings": "설정",
|
||||||
"nav_button_documentation": "문서",
|
"nav_button_documentation": "문서",
|
||||||
"notifications_attachment_link_expires": "링크가 {{date}}에 만료됨",
|
"notifications_attachment_link_expires": "링크가 {{date}}에 만료됨",
|
||||||
"notifications_attachment_link_expired": "다운로드 링크 만료됨",
|
"notifications_attachment_link_expired": "다운로드 링크 만료됨",
|
||||||
"notifications_attachment_file_audio": "음성 파일",
|
"notifications_attachment_file_audio": "음성 파일",
|
||||||
"notifications_attachment_file_image": "사진 파일",
|
"notifications_attachment_file_image": "사진 파일",
|
||||||
"notifications_actions_open_url_title": "{{url}]로 가기",
|
"notifications_actions_open_url_title": "{{url}]로 가기",
|
||||||
"notifications_actions_http_request_title": "HTTP {{method}}를 {{url}}에 보내기",
|
"notifications_actions_http_request_title": "HTTP {{method}}를 {{url}}에 보내기",
|
||||||
"notifications_none_for_topic_title": "아직 이 주제 관련 알림을 받지 않았습니다.",
|
"notifications_none_for_topic_title": "아직 이 주제 관련 알림을 받지 않았습니다.",
|
||||||
"notifications_none_for_any_title": "아직 어떤 알림도 받지 않았습니다.",
|
"notifications_none_for_any_title": "아직 어떤 알림도 받지 않았습니다.",
|
||||||
"notifications_none_for_any_description": "알림을 받으려면 아래 주소로 PUT이나 POST 요청을 보내세요. 구독중이신 주제 중 하나로 예를 들자면 다음과 같습니다.",
|
"notifications_none_for_any_description": "알림을 받으려면 아래 주소로 PUT이나 POST 요청을 보내세요. 구독중이신 주제 중 하나로 예를 들자면 다음과 같습니다.",
|
||||||
"notifications_loading": "알림 불러오는중 …",
|
"notifications_loading": "알림 불러오는중 …",
|
||||||
"publish_dialog_message_published": "알림 발송됨",
|
"publish_dialog_message_published": "알림 발송됨",
|
||||||
"notifications_none_for_topic_description": "알림을 받으려면 아래 주소로 PUT이나 POST 요청을 보내세요.",
|
"notifications_none_for_topic_description": "알림을 받으려면 아래 주소로 PUT이나 POST 요청을 보내세요.",
|
||||||
"notifications_no_subscriptions_description": "\"{{linktext}}\" 링크를 눌러서 주제를 생성하거나 구독하세요. 그 다음, 메세지를 PUT이나 POST로 보내면 여기에서 알림을 받으실 수 있습니다.",
|
"notifications_no_subscriptions_description": "\"{{linktext}}\" 링크를 눌러서 주제를 생성하거나 구독하세요. 그 다음, 메세지를 PUT이나 POST로 보내면 여기에서 알림을 받으실 수 있습니다.",
|
||||||
"publish_dialog_progress_uploading": "업로드중 …",
|
"publish_dialog_progress_uploading": "업로드중 …",
|
||||||
"publish_dialog_title_no_topic": "알림 발송",
|
"publish_dialog_title_no_topic": "알림 발송",
|
||||||
"publish_dialog_progress_uploading_detail": "업로드중 {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "업로드중 {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_delay_placeholder": "알림 발송 지연, 예를 들면 {{unixTimestamp}}, {{relativeTime}} 또는 \"{{naturalLanguage}}\" (영어로 입력)",
|
"publish_dialog_delay_placeholder": "알림 발송 지연, 예를 들면 {{unixTimestamp}}, {{relativeTime}} 또는 \"{{naturalLanguage}}\" (영어로 입력)",
|
||||||
"publish_dialog_delay_reset": "발송 지연 삭제",
|
"publish_dialog_delay_reset": "발송 지연 삭제",
|
||||||
"publish_dialog_chip_click_label": "클릭 URL",
|
"publish_dialog_chip_click_label": "클릭 URL",
|
||||||
"subscribe_dialog_login_description": "이 주제는 비밀번호로 보호되어 있습니다. 구독하시려면 사용자 이름과 비밀번호를 입력해주세요.",
|
"subscribe_dialog_login_description": "이 주제는 비밀번호로 보호되어 있습니다. 구독하시려면 사용자 이름과 비밀번호를 입력해주세요.",
|
||||||
"prefs_notifications_min_priority_max_only": "우선순위 최상만",
|
"prefs_notifications_min_priority_max_only": "우선순위 최상만",
|
||||||
"publish_dialog_other_features": "다른 기능:",
|
"publish_dialog_other_features": "다른 기능:",
|
||||||
"prefs_notifications_min_priority_description_any": "우선순위 무관 모든 알림 보기",
|
"prefs_notifications_min_priority_description_any": "우선순위 무관 모든 알림 보기",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "우선순위 높음 이상",
|
"prefs_notifications_min_priority_high_and_higher": "우선순위 높음 이상",
|
||||||
"error_boundary_unsupported_indexeddb_description": "ntfy 웹 앱은 동작하기 위해서 IndexedDB가 필요하지만 사용중이신 브라우저는 IndexedDB를 시크릿 모드에서 지원하지 않습니다.<br/><br/>안타깝지만 모든 정보는 브라우저에만 저장되므로 ntfy 웹앱을 시크릿 모드에서 사용할 이유는 존재하지 않습니다. <githubLink>이 깃허브 이슈</githubLink>를 참고해 보시거나, <discordLink>디스코드 서버</discordLink>나 <matrixLink>Matrix</matrixLink>에서 저희와 이야기를 나눌 수 있습니다.",
|
"error_boundary_unsupported_indexeddb_description": "ntfy 웹 앱은 동작하기 위해서 IndexedDB가 필요하지만 사용중이신 브라우저는 IndexedDB를 시크릿 모드에서 지원하지 않습니다.<br/><br/>안타깝지만 모든 정보는 브라우저에만 저장되므로 ntfy 웹앱을 시크릿 모드에서 사용할 이유는 존재하지 않습니다. <githubLink>이 깃허브 이슈</githubLink>를 참고해 보시거나, <discordLink>디스코드 서버</discordLink>나 <matrixLink>Matrix</matrixLink>에서 저희와 이야기를 나눌 수 있습니다.",
|
||||||
"prefs_notifications_delete_after_title": "알림 삭제",
|
"prefs_notifications_delete_after_title": "알림 삭제",
|
||||||
"prefs_notifications_delete_after_never": "삭제하지 않음",
|
"prefs_notifications_delete_after_never": "삭제하지 않음",
|
||||||
"prefs_users_table": "사용자 테이블",
|
"prefs_users_table": "사용자 테이블",
|
||||||
"prefs_users_dialog_username_label": "사용자 이름, 예를 들면 phil",
|
"prefs_users_dialog_username_label": "사용자 이름, 예를 들면 phil",
|
||||||
"prefs_users_dialog_password_label": "비밀번호",
|
"prefs_users_dialog_password_label": "비밀번호",
|
||||||
"priority_max": "최상",
|
"priority_max": "최상",
|
||||||
"error_boundary_description": "이것은 당연히 발생되어서는 안됩니다. 굉장히 죄송합니다.<br/>가능하시다면 <githubLink>이 문제를 깃허브에 제보</githubLink>해 주시거나, <discordLink>디스코드 서버</discordLink>나 <matrixLink>Matrix</matrixLink>를 통해 알려주세요."
|
"error_boundary_description": "이것은 당연히 발생되어서는 안됩니다. 굉장히 죄송합니다.<br/>가능하시다면 <githubLink>이 문제를 깃허브에 제보</githubLink>해 주시거나, <discordLink>디스코드 서버</discordLink>나 <matrixLink>Matrix</matrixLink>를 통해 알려주세요."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,126 +1,126 @@
|
||||||
{
|
{
|
||||||
"nav_button_subscribe": "Abonner på emne",
|
"nav_button_subscribe": "Abonner på emne",
|
||||||
"action_bar_settings": "Innstillinger",
|
"action_bar_settings": "Innstillinger",
|
||||||
"action_bar_send_test_notification": "Send testmerknad",
|
"action_bar_send_test_notification": "Send testmerknad",
|
||||||
"action_bar_clear_notifications": "Tøm alle merknader",
|
"action_bar_clear_notifications": "Tøm alle merknader",
|
||||||
"action_bar_unsubscribe": "Opphev abonnement",
|
"action_bar_unsubscribe": "Opphev abonnement",
|
||||||
"message_bar_type_message": "Skriv en melding her",
|
"message_bar_type_message": "Skriv en melding her",
|
||||||
"nav_button_all_notifications": "Alle merknader",
|
"nav_button_all_notifications": "Alle merknader",
|
||||||
"nav_button_settings": "Innstillinger",
|
"nav_button_settings": "Innstillinger",
|
||||||
"nav_button_documentation": "Dokumentasjon",
|
"nav_button_documentation": "Dokumentasjon",
|
||||||
"nav_topics_title": "Abonnerte emner",
|
"nav_topics_title": "Abonnerte emner",
|
||||||
"alert_grant_title": "Merknader er avskrudd",
|
"alert_grant_title": "Merknader er avskrudd",
|
||||||
"alert_not_supported_title": "Merknader støttes ikke",
|
"alert_not_supported_title": "Merknader støttes ikke",
|
||||||
"notifications_copied_to_clipboard": "Kopiert til utklippstavlen",
|
"notifications_copied_to_clipboard": "Kopiert til utklippstavlen",
|
||||||
"notifications_attachment_copy_url_title": "Kopier vedleggsnettadresse til utklippstavlen",
|
"notifications_attachment_copy_url_title": "Kopier vedleggsnettadresse til utklippstavlen",
|
||||||
"notifications_attachment_copy_url_button": "Kopier nettadresse",
|
"notifications_attachment_copy_url_button": "Kopier nettadresse",
|
||||||
"notifications_attachment_open_button": "Åpne vedlegg",
|
"notifications_attachment_open_button": "Åpne vedlegg",
|
||||||
"notifications_attachment_open_title": "Gå til {{url}}",
|
"notifications_attachment_open_title": "Gå til {{url}}",
|
||||||
"notifications_attachment_link_expires": "lenken utløper {{date}}",
|
"notifications_attachment_link_expires": "lenken utløper {{date}}",
|
||||||
"notifications_click_copy_url_title": "Kopier lenke-nettadresse til utklippstavlen",
|
"notifications_click_copy_url_title": "Kopier lenke-nettadresse til utklippstavlen",
|
||||||
"notifications_actions_open_url_title": "Gå til {{url}}",
|
"notifications_actions_open_url_title": "Gå til {{url}}",
|
||||||
"notifications_tags": "Etiketter",
|
"notifications_tags": "Etiketter",
|
||||||
"notifications_attachment_link_expired": "nedlastingslenken har utløpt",
|
"notifications_attachment_link_expired": "nedlastingslenken har utløpt",
|
||||||
"notifications_none_for_any_title": "Du har ikke mottatt noen merknader.",
|
"notifications_none_for_any_title": "Du har ikke mottatt noen merknader.",
|
||||||
"notifications_click_open_button": "Åpne lenke",
|
"notifications_click_open_button": "Åpne lenke",
|
||||||
"notifications_none_for_topic_title": "Du har ikke mottatt noen merknader for dette emnet enda.",
|
"notifications_none_for_topic_title": "Du har ikke mottatt noen merknader for dette emnet enda.",
|
||||||
"notifications_example": "Eksempel",
|
"notifications_example": "Eksempel",
|
||||||
"publish_dialog_title_topic": "Publiser til {{topic}}",
|
"publish_dialog_title_topic": "Publiser til {{topic}}",
|
||||||
"publish_dialog_priority_min": "Min. prioritet",
|
"publish_dialog_priority_min": "Min. prioritet",
|
||||||
"publish_dialog_priority_low": "Lav prioritet",
|
"publish_dialog_priority_low": "Lav prioritet",
|
||||||
"publish_dialog_priority_default": "Forvalgt prioritet",
|
"publish_dialog_priority_default": "Forvalgt prioritet",
|
||||||
"publish_dialog_priority_high": "Høy prioritet",
|
"publish_dialog_priority_high": "Høy prioritet",
|
||||||
"publish_dialog_priority_max": "Maks. prioritet",
|
"publish_dialog_priority_max": "Maks. prioritet",
|
||||||
"publish_dialog_base_url_label": "Tjeneste-nettadresse",
|
"publish_dialog_base_url_label": "Tjeneste-nettadresse",
|
||||||
"publish_dialog_message_label": "Melding",
|
"publish_dialog_message_label": "Melding",
|
||||||
"publish_dialog_priority_label": "Prioritet",
|
"publish_dialog_priority_label": "Prioritet",
|
||||||
"publish_dialog_tags_label": "Etiketter",
|
"publish_dialog_tags_label": "Etiketter",
|
||||||
"publish_dialog_click_placeholder": "Nettadresse som åpnes når merknaden klikkes",
|
"publish_dialog_click_placeholder": "Nettadresse som åpnes når merknaden klikkes",
|
||||||
"publish_dialog_attach_label": "Vedleggs-nettadresse",
|
"publish_dialog_attach_label": "Vedleggs-nettadresse",
|
||||||
"publish_dialog_attach_placeholder": "Legg ved fil per nettadresse, f.eks. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Legg ved fil per nettadresse, f.eks. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_filename_label": "Filnavn",
|
"publish_dialog_filename_label": "Filnavn",
|
||||||
"publish_dialog_delay_label": "Forsinkelse",
|
"publish_dialog_delay_label": "Forsinkelse",
|
||||||
"publish_dialog_filename_placeholder": "Vedleggets filnavn",
|
"publish_dialog_filename_placeholder": "Vedleggets filnavn",
|
||||||
"publish_dialog_other_features": "Andre funksjoner:",
|
"publish_dialog_other_features": "Andre funksjoner:",
|
||||||
"publish_dialog_chip_email_label": "Videresend til e-post",
|
"publish_dialog_chip_email_label": "Videresend til e-post",
|
||||||
"publish_dialog_chip_topic_label": "Endre emne",
|
"publish_dialog_chip_topic_label": "Endre emne",
|
||||||
"publish_dialog_button_cancel_sending": "Avbryt forsendelse",
|
"publish_dialog_button_cancel_sending": "Avbryt forsendelse",
|
||||||
"publish_dialog_chip_attach_file_label": "Legg ved lokal fil",
|
"publish_dialog_chip_attach_file_label": "Legg ved lokal fil",
|
||||||
"publish_dialog_attached_file_title": "Vedlagt fil:",
|
"publish_dialog_attached_file_title": "Vedlagt fil:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Vedleggsfilnavn",
|
"publish_dialog_attached_file_filename_placeholder": "Vedleggsfilnavn",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Bruk en annen tjener",
|
"subscribe_dialog_subscribe_use_another_label": "Bruk en annen tjener",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Avbryt",
|
"subscribe_dialog_subscribe_button_cancel": "Avbryt",
|
||||||
"publish_dialog_drop_file_here": "Slipp filen her",
|
"publish_dialog_drop_file_here": "Slipp filen her",
|
||||||
"subscribe_dialog_subscribe_title": "Abonner på emne",
|
"subscribe_dialog_subscribe_title": "Abonner på emne",
|
||||||
"emoji_picker_search_placeholder": "Søk etter emoji",
|
"emoji_picker_search_placeholder": "Søk etter emoji",
|
||||||
"subscribe_dialog_login_button_login": "Logg inn",
|
"subscribe_dialog_login_button_login": "Logg inn",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Abonner",
|
"subscribe_dialog_subscribe_button_subscribe": "Abonner",
|
||||||
"subscribe_dialog_login_title": "Innlogging kreves",
|
"subscribe_dialog_login_title": "Innlogging kreves",
|
||||||
"subscribe_dialog_login_username_label": "Brukernavn, f.eks. phil",
|
"subscribe_dialog_login_username_label": "Brukernavn, f.eks. phil",
|
||||||
"subscribe_dialog_login_password_label": "Passord",
|
"subscribe_dialog_login_password_label": "Passord",
|
||||||
"prefs_notifications_title": "Merknader",
|
"prefs_notifications_title": "Merknader",
|
||||||
"prefs_notifications_sound_title": "Merknadslyd",
|
"prefs_notifications_sound_title": "Merknadslyd",
|
||||||
"prefs_notifications_sound_no_sound": "Ingen lyd",
|
"prefs_notifications_sound_no_sound": "Ingen lyd",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonym",
|
"subscribe_dialog_error_user_anonymous": "anonym",
|
||||||
"error_boundary_stack_trace": "Stabelspor",
|
"error_boundary_stack_trace": "Stabelspor",
|
||||||
"error_boundary_button_copy_stack_trace": "Kopier stabelspor",
|
"error_boundary_button_copy_stack_trace": "Kopier stabelspor",
|
||||||
"message_bar_error_publishing": "Kunne ikke publisere merknader",
|
"message_bar_error_publishing": "Kunne ikke publisere merknader",
|
||||||
"nav_button_publish_message": "Publiser merknad",
|
"nav_button_publish_message": "Publiser merknad",
|
||||||
"publish_dialog_title_no_topic": "Publiser merknad",
|
"publish_dialog_title_no_topic": "Publiser merknad",
|
||||||
"publish_dialog_progress_uploading": "Laster opp …",
|
"publish_dialog_progress_uploading": "Laster opp …",
|
||||||
"publish_dialog_progress_uploading_detail": "Laster opp {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Laster opp {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"notifications_loading": "Laster inn merknader …",
|
"notifications_loading": "Laster inn merknader …",
|
||||||
"publish_dialog_message_published": "Merknad publisert",
|
"publish_dialog_message_published": "Merknad publisert",
|
||||||
"publish_dialog_email_placeholder": "Adresse å videresende merknaden til, f.eks. phil@example.com",
|
"publish_dialog_email_placeholder": "Adresse å videresende merknaden til, f.eks. phil@example.com",
|
||||||
"error_boundary_gathering_info": "Hent mer info …",
|
"error_boundary_gathering_info": "Hent mer info …",
|
||||||
"prefs_notifications_sound_description_some": "Merknader spiller {{sound}}-lyd når de mottas",
|
"prefs_notifications_sound_description_some": "Merknader spiller {{sound}}-lyd når de mottas",
|
||||||
"prefs_notifications_min_priority_description_any": "Viser aller merknader, uavhengig av prioritet",
|
"prefs_notifications_min_priority_description_any": "Viser aller merknader, uavhengig av prioritet",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Vis merknader hvis prioritet er {{number}} ({{name}}) eller høyere",
|
"prefs_notifications_min_priority_description_x_or_higher": "Vis merknader hvis prioritet er {{number}} ({{name}}) eller høyere",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Høy prioritet og høyere",
|
"prefs_notifications_min_priority_high_and_higher": "Høy prioritet og høyere",
|
||||||
"prefs_notifications_min_priority_max_only": "Kun maks. prioritet",
|
"prefs_notifications_min_priority_max_only": "Kun maks. prioritet",
|
||||||
"prefs_notifications_delete_after_one_day": "Etter én dag",
|
"prefs_notifications_delete_after_one_day": "Etter én dag",
|
||||||
"prefs_notifications_delete_after_one_week": "Etter én uke",
|
"prefs_notifications_delete_after_one_week": "Etter én uke",
|
||||||
"prefs_notifications_delete_after_one_month": "Etter én måned",
|
"prefs_notifications_delete_after_one_month": "Etter én måned",
|
||||||
"prefs_notifications_delete_after_never_description": "Merknader blir aldri slettet automatisk",
|
"prefs_notifications_delete_after_never_description": "Merknader blir aldri slettet automatisk",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Merknader slettes automatisk etter tre timer",
|
"prefs_notifications_delete_after_three_hours_description": "Merknader slettes automatisk etter tre timer",
|
||||||
"prefs_users_title": "Håndter brukere",
|
"prefs_users_title": "Håndter brukere",
|
||||||
"prefs_users_add_button": "Legg til bruker",
|
"prefs_users_add_button": "Legg til bruker",
|
||||||
"prefs_users_table_user_header": "Bruker",
|
"prefs_users_table_user_header": "Bruker",
|
||||||
"prefs_users_dialog_title_add": "Legg til bruker",
|
"prefs_users_dialog_title_add": "Legg til bruker",
|
||||||
"prefs_users_dialog_title_edit": "Rediger bruker",
|
"prefs_users_dialog_title_edit": "Rediger bruker",
|
||||||
"prefs_users_dialog_base_url_label": "Tjeneste-nettadresse, f.eks. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "Tjeneste-nettadresse, f.eks. https://ntfy.sh",
|
||||||
"prefs_users_dialog_password_label": "Passord",
|
"prefs_users_dialog_password_label": "Passord",
|
||||||
"prefs_users_dialog_button_save": "Lagre",
|
"prefs_users_dialog_button_save": "Lagre",
|
||||||
"prefs_appearance_title": "Utseende",
|
"prefs_appearance_title": "Utseende",
|
||||||
"prefs_appearance_language_title": "Språk",
|
"prefs_appearance_language_title": "Språk",
|
||||||
"prefs_users_dialog_username_label": "Brukernavn, f.eks. phil",
|
"prefs_users_dialog_username_label": "Brukernavn, f.eks. phil",
|
||||||
"priority_low": "lav",
|
"priority_low": "lav",
|
||||||
"priority_default": "forvalg",
|
"priority_default": "forvalg",
|
||||||
"priority_high": "høy",
|
"priority_high": "høy",
|
||||||
"priority_max": "maks.",
|
"priority_max": "maks.",
|
||||||
"alert_grant_button": "Innvilg nå",
|
"alert_grant_button": "Innvilg nå",
|
||||||
"publish_dialog_topic_label": "Emnenavn",
|
"publish_dialog_topic_label": "Emnenavn",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Merknader slettes automatisk etter én dag",
|
"prefs_notifications_delete_after_one_day_description": "Merknader slettes automatisk etter én dag",
|
||||||
"notifications_click_copy_url_button": "Kopier lenke",
|
"notifications_click_copy_url_button": "Kopier lenke",
|
||||||
"error_boundary_title": "Oida. Ntfy krasjet.",
|
"error_boundary_title": "Oida. Ntfy krasjet.",
|
||||||
"publish_dialog_message_placeholder": "Skriv en melding her",
|
"publish_dialog_message_placeholder": "Skriv en melding her",
|
||||||
"publish_dialog_button_cancel": "Avbryt",
|
"publish_dialog_button_cancel": "Avbryt",
|
||||||
"prefs_notifications_min_priority_title": "Minimumsprioritet",
|
"prefs_notifications_min_priority_title": "Minimumsprioritet",
|
||||||
"prefs_notifications_delete_after_title": "Slett merknader",
|
"prefs_notifications_delete_after_title": "Slett merknader",
|
||||||
"prefs_notifications_delete_after_never": "Aldri",
|
"prefs_notifications_delete_after_never": "Aldri",
|
||||||
"publish_dialog_email_label": "E-post",
|
"publish_dialog_email_label": "E-post",
|
||||||
"publish_dialog_button_send": "Send",
|
"publish_dialog_button_send": "Send",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Merknader slettes automatisk etter én uke",
|
"prefs_notifications_delete_after_one_week_description": "Merknader slettes automatisk etter én uke",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Merknader slettes automatisk etter én måned",
|
"prefs_notifications_delete_after_one_month_description": "Merknader slettes automatisk etter én måned",
|
||||||
"priority_min": "min.",
|
"priority_min": "min.",
|
||||||
"subscribe_dialog_login_button_back": "Tilbake",
|
"subscribe_dialog_login_button_back": "Tilbake",
|
||||||
"prefs_notifications_delete_after_three_hours": "Etter tre timer",
|
"prefs_notifications_delete_after_three_hours": "Etter tre timer",
|
||||||
"prefs_users_table_base_url_header": "Tjeneste-nettadresse",
|
"prefs_users_table_base_url_header": "Tjeneste-nettadresse",
|
||||||
"prefs_users_dialog_button_cancel": "Avbryt",
|
"prefs_users_dialog_button_cancel": "Avbryt",
|
||||||
"prefs_users_dialog_button_add": "Legg til",
|
"prefs_users_dialog_button_add": "Legg til",
|
||||||
"publish_dialog_chip_attach_url_label": "Legg ved fil per nettadresse",
|
"publish_dialog_chip_attach_url_label": "Legg ved fil per nettadresse",
|
||||||
"publish_dialog_tags_placeholder": "Kommainndelt liste over etiketter, f.eks. advarsel, srv1-sikkerhetskopi",
|
"publish_dialog_tags_placeholder": "Kommainndelt liste over etiketter, f.eks. advarsel, srv1-sikkerhetskopi",
|
||||||
"prefs_notifications_sound_description_none": "Merknader er lydløse når de mottas",
|
"prefs_notifications_sound_description_none": "Merknader er lydløse når de mottas",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Emnenavn, f.eks. phil_varsler",
|
"subscribe_dialog_subscribe_topic_placeholder": "Emnenavn, f.eks. phil_varsler",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Forvalgt prioritet og høyere"
|
"prefs_notifications_min_priority_default_and_higher": "Forvalgt prioritet og høyere"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_settings": "Instellingen",
|
"action_bar_settings": "Instellingen",
|
||||||
"action_bar_send_test_notification": "Stuur test notificatie",
|
"action_bar_send_test_notification": "Stuur test notificatie",
|
||||||
"action_bar_clear_notifications": "Wis alle notificaties",
|
"action_bar_clear_notifications": "Wis alle notificaties",
|
||||||
"message_bar_type_message": "Typ hier een bericht",
|
"message_bar_type_message": "Typ hier een bericht",
|
||||||
"action_bar_unsubscribe": "Afmelden",
|
"action_bar_unsubscribe": "Afmelden",
|
||||||
"message_bar_error_publishing": "Fout bij publiceren notificatie",
|
"message_bar_error_publishing": "Fout bij publiceren notificatie",
|
||||||
"nav_topics_title": "Geabonneerde onderwerpen",
|
"nav_topics_title": "Geabonneerde onderwerpen",
|
||||||
"nav_button_settings": "Instellingen",
|
"nav_button_settings": "Instellingen",
|
||||||
"alert_not_supported_description": "Notificaties worden niet ondersteund in je browser.",
|
"alert_not_supported_description": "Notificaties worden niet ondersteund in je browser.",
|
||||||
"notifications_none_for_any_title": "Je hebt nog geen notificaties ontvangen.",
|
"notifications_none_for_any_title": "Je hebt nog geen notificaties ontvangen.",
|
||||||
"publish_dialog_tags_label": "Tags",
|
"publish_dialog_tags_label": "Tags",
|
||||||
"publish_dialog_chip_attach_file_label": "Lokaal bestand bijvoegen",
|
"publish_dialog_chip_attach_file_label": "Lokaal bestand bijvoegen",
|
||||||
"prefs_users_dialog_title_edit": "Gebruiker bewerken",
|
"prefs_users_dialog_title_edit": "Gebruiker bewerken",
|
||||||
"error_boundary_title": "Oh nee, ntfy is vastgelopen",
|
"error_boundary_title": "Oh nee, ntfy is vastgelopen",
|
||||||
"error_boundary_description": "Dit hoort natuurlijk niet te gebeuren. Onze excuses.<br/>Wanneer het mogelijk is, <githubLink>meld deze fout op GitHub</githubLink>, of laat het ons weten via <discordLink>Discord</discordLink> of <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Dit hoort natuurlijk niet te gebeuren. Onze excuses.<br/>Wanneer het mogelijk is, <githubLink>meld deze fout op GitHub</githubLink>, of laat het ons weten via <discordLink>Discord</discordLink> of <matrixLink>Matrix</matrixLink>.",
|
||||||
"error_boundary_button_copy_stack_trace": "Stack trace kopiëren",
|
"error_boundary_button_copy_stack_trace": "Stack trace kopiëren",
|
||||||
"error_boundary_stack_trace": "Stacktrace",
|
"error_boundary_stack_trace": "Stacktrace",
|
||||||
"error_boundary_gathering_info": "Meer informatie verzamelen …",
|
"error_boundary_gathering_info": "Meer informatie verzamelen …",
|
||||||
"prefs_users_delete_button": "Gebruiker verwijderen",
|
"prefs_users_delete_button": "Gebruiker verwijderen",
|
||||||
"prefs_notifications_delete_after_one_week": "Na één week",
|
"prefs_notifications_delete_after_one_week": "Na één week",
|
||||||
"prefs_notifications_delete_after_one_month": "Na één maand",
|
"prefs_notifications_delete_after_one_month": "Na één maand",
|
||||||
"prefs_users_dialog_title_add": "Gebruiker toevoegen",
|
"prefs_users_dialog_title_add": "Gebruiker toevoegen",
|
||||||
"prefs_users_dialog_password_label": "Wachtwoord",
|
"prefs_users_dialog_password_label": "Wachtwoord",
|
||||||
"error_boundary_unsupported_indexeddb_description": "De ntfy web applicatie heeft IndexedDB nodig om correct te kunnen functioneren, helaas ondersteund jouw browser IndexedDB niet in privé / incognito modus.<br/><br/>Dit is jammer maar het is ook onlogisch om de ntfy web applicatie in privé / incognito modus te gebruiken want alle gegevens worden bewaard in de browser zijn lokale opslag. Je kan hier meer over lezen <githubLink>in deze GitHub issue</githubLink>, of praat met ons op <discordLink>Discord</discordLink> of <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_unsupported_indexeddb_description": "De ntfy web applicatie heeft IndexedDB nodig om correct te kunnen functioneren, helaas ondersteund jouw browser IndexedDB niet in privé / incognito modus.<br/><br/>Dit is jammer maar het is ook onlogisch om de ntfy web applicatie in privé / incognito modus te gebruiken want alle gegevens worden bewaard in de browser zijn lokale opslag. Je kan hier meer over lezen <githubLink>in deze GitHub issue</githubLink>, of praat met ons op <discordLink>Discord</discordLink> of <matrixLink>Matrix</matrixLink>.",
|
||||||
"action_bar_show_menu": "Toon menu",
|
"action_bar_show_menu": "Toon menu",
|
||||||
"action_bar_logo_alt": "ntfy logo",
|
"action_bar_logo_alt": "ntfy logo",
|
||||||
"action_bar_toggle_mute": "Notificaties dempen/opheffen",
|
"action_bar_toggle_mute": "Notificaties dempen/opheffen",
|
||||||
"action_bar_toggle_action_menu": "Actie menu openen/sluiten",
|
"action_bar_toggle_action_menu": "Actie menu openen/sluiten",
|
||||||
"message_bar_show_dialog": "Toon publicatie venster",
|
"message_bar_show_dialog": "Toon publicatie venster",
|
||||||
"message_bar_publish": "Bericht publiceren",
|
"message_bar_publish": "Bericht publiceren",
|
||||||
"nav_button_all_notifications": "Alle notificaties",
|
"nav_button_all_notifications": "Alle notificaties",
|
||||||
"nav_button_documentation": "Documentatie",
|
"nav_button_documentation": "Documentatie",
|
||||||
"nav_button_publish_message": "Notificatie publiceren",
|
"nav_button_publish_message": "Notificatie publiceren",
|
||||||
"nav_button_subscribe": "Onderwerp abonneren",
|
"nav_button_subscribe": "Onderwerp abonneren",
|
||||||
"nav_button_muted": "Notificaties gedempt",
|
"nav_button_muted": "Notificaties gedempt",
|
||||||
"nav_button_connecting": "verbinden",
|
"nav_button_connecting": "verbinden",
|
||||||
"alert_grant_title": "Notificaties zijn uitgeschakeld",
|
"alert_grant_title": "Notificaties zijn uitgeschakeld",
|
||||||
"alert_grant_description": "Geef je browser toestemming om meldingen weer te geven.",
|
"alert_grant_description": "Geef je browser toestemming om meldingen weer te geven.",
|
||||||
"alert_grant_button": "Nu toestaan",
|
"alert_grant_button": "Nu toestaan",
|
||||||
"alert_not_supported_title": "Notificaties zijn niet ondersteund",
|
"alert_not_supported_title": "Notificaties zijn niet ondersteund",
|
||||||
"notifications_list": "Notificaties lijst",
|
"notifications_list": "Notificaties lijst",
|
||||||
"notifications_list_item": "Notificatie",
|
"notifications_list_item": "Notificatie",
|
||||||
"notifications_mark_read": "Markeer als gelezen",
|
"notifications_mark_read": "Markeer als gelezen",
|
||||||
"notifications_delete": "Verwijder",
|
"notifications_delete": "Verwijder",
|
||||||
"notifications_copied_to_clipboard": "Gekopieerd naar klembord",
|
"notifications_copied_to_clipboard": "Gekopieerd naar klembord",
|
||||||
"notifications_tags": "Tags",
|
"notifications_tags": "Tags",
|
||||||
"notifications_priority_x": "Prioriteit {{priority}}",
|
"notifications_priority_x": "Prioriteit {{priority}}",
|
||||||
"notifications_new_indicator": "Nieuwe notificatie",
|
"notifications_new_indicator": "Nieuwe notificatie",
|
||||||
"notifications_attachment_image": "Afbeelding bijlage",
|
"notifications_attachment_image": "Afbeelding bijlage",
|
||||||
"notifications_attachment_copy_url_title": "Kopieer URL van bijlage naar klembord",
|
"notifications_attachment_copy_url_title": "Kopieer URL van bijlage naar klembord",
|
||||||
"notifications_attachment_copy_url_button": "URL kopiëren",
|
"notifications_attachment_copy_url_button": "URL kopiëren",
|
||||||
"notifications_attachment_open_title": "Ga naar {{url}}",
|
"notifications_attachment_open_title": "Ga naar {{url}}",
|
||||||
"notifications_attachment_open_button": "Bijlage openen",
|
"notifications_attachment_open_button": "Bijlage openen",
|
||||||
"notifications_attachment_link_expires": "link vervalt op {{date}}",
|
"notifications_attachment_link_expires": "link vervalt op {{date}}",
|
||||||
"notifications_attachment_link_expired": "download link is verlopen",
|
"notifications_attachment_link_expired": "download link is verlopen",
|
||||||
"notifications_attachment_file_image": "afbeeldingsbestand",
|
"notifications_attachment_file_image": "afbeeldingsbestand",
|
||||||
"notifications_attachment_file_video": "videobestand",
|
"notifications_attachment_file_video": "videobestand",
|
||||||
"notifications_attachment_file_audio": "audiobestand",
|
"notifications_attachment_file_audio": "audiobestand",
|
||||||
"notifications_attachment_file_app": "Android app bestand",
|
"notifications_attachment_file_app": "Android app bestand",
|
||||||
"notifications_attachment_file_document": "overig document",
|
"notifications_attachment_file_document": "overig document",
|
||||||
"notifications_click_copy_url_title": "URL naar klembord kopiëren",
|
"notifications_click_copy_url_title": "URL naar klembord kopiëren",
|
||||||
"notifications_click_copy_url_button": "Link kopiëren",
|
"notifications_click_copy_url_button": "Link kopiëren",
|
||||||
"notifications_click_open_button": "Link openen",
|
"notifications_click_open_button": "Link openen",
|
||||||
"notifications_none_for_topic_description": "Om notificaties naar dit onderwerp te sturen, doe een PUT of POST naar de URL van het onderwerp.",
|
"notifications_none_for_topic_description": "Om notificaties naar dit onderwerp te sturen, doe een PUT of POST naar de URL van het onderwerp.",
|
||||||
"notifications_none_for_any_description": "Om notificaties naar dit onderwerp te sturen, doe een PUT of POST naar de URL van het onderwerp. Hier is een voorbeeld met één van je onderwerpen.",
|
"notifications_none_for_any_description": "Om notificaties naar dit onderwerp te sturen, doe een PUT of POST naar de URL van het onderwerp. Hier is een voorbeeld met één van je onderwerpen.",
|
||||||
"notifications_no_subscriptions_title": "Het lijkt erop dat je nog op geen onderwerpen geabonneerd bent.",
|
"notifications_no_subscriptions_title": "Het lijkt erop dat je nog op geen onderwerpen geabonneerd bent.",
|
||||||
"notifications_no_subscriptions_description": "Klik op de \"{{linktext}}\" link om een onderwerp te maken of erop te abonneren. Daarna kan je berichten sturen via PUT of POST and ontvang je hier notificaties.",
|
"notifications_no_subscriptions_description": "Klik op de \"{{linktext}}\" link om een onderwerp te maken of erop te abonneren. Daarna kan je berichten sturen via PUT of POST and ontvang je hier notificaties.",
|
||||||
"notifications_example": "Voorbeeld",
|
"notifications_example": "Voorbeeld",
|
||||||
"notifications_more_details": "Voor meer informatie, bezoek de <websiteLink>website</websiteLink> of <docsLink>documentatie</docsLink>.",
|
"notifications_more_details": "Voor meer informatie, bezoek de <websiteLink>website</websiteLink> of <docsLink>documentatie</docsLink>.",
|
||||||
"notifications_loading": "Notificaties laden …",
|
"notifications_loading": "Notificaties laden …",
|
||||||
"publish_dialog_title_topic": "Publiceren naar {{topic}}",
|
"publish_dialog_title_topic": "Publiceren naar {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Notificatie publiceren",
|
"publish_dialog_title_no_topic": "Notificatie publiceren",
|
||||||
"publish_dialog_progress_uploading": "Uploaden …",
|
"publish_dialog_progress_uploading": "Uploaden …",
|
||||||
"notifications_actions_open_url_title": "Ga naar {{url}}",
|
"notifications_actions_open_url_title": "Ga naar {{url}}",
|
||||||
"notifications_actions_not_supported": "Deze actie is niet ondersteund in de web applicatie",
|
"notifications_actions_not_supported": "Deze actie is niet ondersteund in de web applicatie",
|
||||||
"notifications_actions_http_request_title": "Stuur HTTP {{method}} naar {{url}}",
|
"notifications_actions_http_request_title": "Stuur HTTP {{method}} naar {{url}}",
|
||||||
"notifications_none_for_topic_title": "Je hebt nog geen notificaties ontvangen voor dit onderwerp.",
|
"notifications_none_for_topic_title": "Je hebt nog geen notificaties ontvangen voor dit onderwerp.",
|
||||||
"publish_dialog_priority_low": "Lage prioriteit",
|
"publish_dialog_priority_low": "Lage prioriteit",
|
||||||
"publish_dialog_progress_uploading_detail": "Uploaden {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Uploaden {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_message_published": "Notificatie gepubliceerd",
|
"publish_dialog_message_published": "Notificatie gepubliceerd",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "overschrijd {{fileSizeLimit}} bestandslimiet en quotum, {{remainingBytes}} resterend",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "overschrijd {{fileSizeLimit}} bestandslimiet en quotum, {{remainingBytes}} resterend",
|
||||||
"publish_dialog_attachment_limits_file_reached": "overschrijd {{fileSizeLimit}} bestandslimiet",
|
"publish_dialog_attachment_limits_file_reached": "overschrijd {{fileSizeLimit}} bestandslimiet",
|
||||||
"publish_dialog_priority_default": "Standaard prioriteit",
|
"publish_dialog_priority_default": "Standaard prioriteit",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "overschrijd quotum, {{remainingBytes}} resterend",
|
"publish_dialog_attachment_limits_quota_reached": "overschrijd quotum, {{remainingBytes}} resterend",
|
||||||
"publish_dialog_emoji_picker_show": "Kies een emoji",
|
"publish_dialog_emoji_picker_show": "Kies een emoji",
|
||||||
"publish_dialog_priority_high": "Hoge prioriteit",
|
"publish_dialog_priority_high": "Hoge prioriteit",
|
||||||
"publish_dialog_priority_max": "Maximale prioriteit",
|
"publish_dialog_priority_max": "Maximale prioriteit",
|
||||||
"publish_dialog_priority_min": "Minimale prioriteit",
|
"publish_dialog_priority_min": "Minimale prioriteit",
|
||||||
"publish_dialog_base_url_label": "Service URL",
|
"publish_dialog_base_url_label": "Service URL",
|
||||||
"publish_dialog_base_url_placeholder": "Service URL, bijvoorbeeld: https://voorbeeld.com",
|
"publish_dialog_base_url_placeholder": "Service URL, bijvoorbeeld: https://voorbeeld.com",
|
||||||
"publish_dialog_topic_label": "Onderwerp",
|
"publish_dialog_topic_label": "Onderwerp",
|
||||||
"publish_dialog_topic_placeholder": "Onderwerp, bijv. phil_alerts",
|
"publish_dialog_topic_placeholder": "Onderwerp, bijv. phil_alerts",
|
||||||
"publish_dialog_topic_reset": "Onderwerp resetten",
|
"publish_dialog_topic_reset": "Onderwerp resetten",
|
||||||
"publish_dialog_title_label": "Titel",
|
"publish_dialog_title_label": "Titel",
|
||||||
"publish_dialog_title_placeholder": "Notificatie titel , bijv. Schijfruimte alarm",
|
"publish_dialog_title_placeholder": "Notificatie titel , bijv. Schijfruimte alarm",
|
||||||
"publish_dialog_message_label": "Bericht",
|
"publish_dialog_message_label": "Bericht",
|
||||||
"publish_dialog_message_placeholder": "Typ hier een bericht",
|
"publish_dialog_message_placeholder": "Typ hier een bericht",
|
||||||
"publish_dialog_tags_placeholder": "Komma gescheiden lijst met tags, bijv. waarschuwing, srv1-backup",
|
"publish_dialog_tags_placeholder": "Komma gescheiden lijst met tags, bijv. waarschuwing, srv1-backup",
|
||||||
"publish_dialog_priority_label": "Prioriteit",
|
"publish_dialog_priority_label": "Prioriteit",
|
||||||
"publish_dialog_click_label": "Klik URL",
|
"publish_dialog_click_label": "Klik URL",
|
||||||
"publish_dialog_click_reset": "Verwijder klik URL",
|
"publish_dialog_click_reset": "Verwijder klik URL",
|
||||||
"publish_dialog_email_label": "Email",
|
"publish_dialog_email_label": "Email",
|
||||||
"publish_dialog_email_placeholder": "Adres om de notificatie naar door te sturen, bijv. phil@voorbeeld.com",
|
"publish_dialog_email_placeholder": "Adres om de notificatie naar door te sturen, bijv. phil@voorbeeld.com",
|
||||||
"publish_dialog_email_reset": "Email doorsturen verwijderen",
|
"publish_dialog_email_reset": "Email doorsturen verwijderen",
|
||||||
"publish_dialog_attach_label": "URL van bijlage",
|
"publish_dialog_attach_label": "URL van bijlage",
|
||||||
"publish_dialog_click_placeholder": "URL die geopend zal worden wanneer op de notificatie geklikt wordt",
|
"publish_dialog_click_placeholder": "URL die geopend zal worden wanneer op de notificatie geklikt wordt",
|
||||||
"publish_dialog_attach_placeholder": "Bestand bijvoegen via URL, bijv. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Bestand bijvoegen via URL, bijv. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_attach_reset": "Bijlage URL verwijderen",
|
"publish_dialog_attach_reset": "Bijlage URL verwijderen",
|
||||||
"publish_dialog_filename_label": "Bestandsnaam",
|
"publish_dialog_filename_label": "Bestandsnaam",
|
||||||
"publish_dialog_filename_placeholder": "Bestandsnaam van bijlage",
|
"publish_dialog_filename_placeholder": "Bestandsnaam van bijlage",
|
||||||
"publish_dialog_delay_label": "Uitstellen",
|
"publish_dialog_delay_label": "Uitstellen",
|
||||||
"publish_dialog_delay_placeholder": "Bezorging uitstellen, bijv. {{unixTimestamp}}, {{relativeTime}}, of \"{{naturalLanguage}}\" (alleen Engels)",
|
"publish_dialog_delay_placeholder": "Bezorging uitstellen, bijv. {{unixTimestamp}}, {{relativeTime}}, of \"{{naturalLanguage}}\" (alleen Engels)",
|
||||||
"publish_dialog_delay_reset": "Verwijder uitgestelde bezorging",
|
"publish_dialog_delay_reset": "Verwijder uitgestelde bezorging",
|
||||||
"publish_dialog_other_features": "Andere functionaliteiten:",
|
"publish_dialog_other_features": "Andere functionaliteiten:",
|
||||||
"publish_dialog_chip_click_label": "Klik URL",
|
"publish_dialog_chip_click_label": "Klik URL",
|
||||||
"publish_dialog_chip_email_label": "Doorsturen naar email",
|
"publish_dialog_chip_email_label": "Doorsturen naar email",
|
||||||
"publish_dialog_chip_attach_url_label": "Bestand bijvoegen via URL",
|
"publish_dialog_chip_attach_url_label": "Bestand bijvoegen via URL",
|
||||||
"publish_dialog_chip_delay_label": "Uitgestelde bezorging",
|
"publish_dialog_chip_delay_label": "Uitgestelde bezorging",
|
||||||
"publish_dialog_chip_topic_label": "Onderwerp veranderen",
|
"publish_dialog_chip_topic_label": "Onderwerp veranderen",
|
||||||
"publish_dialog_details_examples_description": "Voor meer voorbeelden en gedetailleerde beschrijvingen van alle functionaliteiten, bekijk de <docsLink>documentatie</docsLink>.",
|
"publish_dialog_details_examples_description": "Voor meer voorbeelden en gedetailleerde beschrijvingen van alle functionaliteiten, bekijk de <docsLink>documentatie</docsLink>.",
|
||||||
"publish_dialog_button_cancel_sending": "Versturen annuleren",
|
"publish_dialog_button_cancel_sending": "Versturen annuleren",
|
||||||
"publish_dialog_button_cancel": "Annuleer",
|
"publish_dialog_button_cancel": "Annuleer",
|
||||||
"publish_dialog_button_send": "Verstuur",
|
"publish_dialog_button_send": "Verstuur",
|
||||||
"publish_dialog_checkbox_publish_another": "Nog een bericht versturen",
|
"publish_dialog_checkbox_publish_another": "Nog een bericht versturen",
|
||||||
"publish_dialog_attached_file_title": "Bijgevoegd bestand:",
|
"publish_dialog_attached_file_title": "Bijgevoegd bestand:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Bijlage bestandsnaam",
|
"publish_dialog_attached_file_filename_placeholder": "Bijlage bestandsnaam",
|
||||||
"publish_dialog_attached_file_remove": "Verwijder bijgevoegd bestand",
|
"publish_dialog_attached_file_remove": "Verwijder bijgevoegd bestand",
|
||||||
"publish_dialog_drop_file_here": "Bestand hier slepen",
|
"publish_dialog_drop_file_here": "Bestand hier slepen",
|
||||||
"emoji_picker_search_placeholder": "Emoji zoeken",
|
"emoji_picker_search_placeholder": "Emoji zoeken",
|
||||||
"emoji_picker_search_clear": "Zoeken leegmaken",
|
"emoji_picker_search_clear": "Zoeken leegmaken",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Onderwerp naam, bijv. phils_waarschuwingen",
|
"subscribe_dialog_subscribe_topic_placeholder": "Onderwerp naam, bijv. phils_waarschuwingen",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Gebruik een andere server",
|
"subscribe_dialog_subscribe_use_another_label": "Gebruik een andere server",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "Service URL",
|
"subscribe_dialog_subscribe_base_url_label": "Service URL",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Annuleren",
|
"subscribe_dialog_subscribe_button_cancel": "Annuleren",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Abonneren",
|
"subscribe_dialog_subscribe_button_subscribe": "Abonneren",
|
||||||
"subscribe_dialog_login_title": "Aanmelding vereist",
|
"subscribe_dialog_login_title": "Aanmelding vereist",
|
||||||
"subscribe_dialog_login_description": "Dit onderwerp is beveiligd met een wachtwoord. Geef een gebruikersnaam en wachtwoord op om te abonneren.",
|
"subscribe_dialog_login_description": "Dit onderwerp is beveiligd met een wachtwoord. Geef een gebruikersnaam en wachtwoord op om te abonneren.",
|
||||||
"subscribe_dialog_login_username_label": "Gebruikersnaam, bijv. phil",
|
"subscribe_dialog_login_username_label": "Gebruikersnaam, bijv. phil",
|
||||||
"subscribe_dialog_subscribe_title": "Onderwerp abonneren",
|
"subscribe_dialog_subscribe_title": "Onderwerp abonneren",
|
||||||
"subscribe_dialog_subscribe_description": "Onderwerpen zijn mogelijk niet beschermd met een wachtwoord, kies daarom een moeilijk te raden naam. Na abonneren kun je notificaties via PUT/POST sturen.",
|
"subscribe_dialog_subscribe_description": "Onderwerpen zijn mogelijk niet beschermd met een wachtwoord, kies daarom een moeilijk te raden naam. Na abonneren kun je notificaties via PUT/POST sturen.",
|
||||||
"subscribe_dialog_login_password_label": "Wachtwoord",
|
"subscribe_dialog_login_password_label": "Wachtwoord",
|
||||||
"subscribe_dialog_login_button_back": "Terug",
|
"subscribe_dialog_login_button_back": "Terug",
|
||||||
"subscribe_dialog_login_button_login": "Aanmelden",
|
"subscribe_dialog_login_button_login": "Aanmelden",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Gebruiker {{username}} heeft geen toegang",
|
"subscribe_dialog_error_user_not_authorized": "Gebruiker {{username}} heeft geen toegang",
|
||||||
"subscribe_dialog_error_user_anonymous": "anoniem",
|
"subscribe_dialog_error_user_anonymous": "anoniem",
|
||||||
"prefs_notifications_title": "Notificaties",
|
"prefs_notifications_title": "Notificaties",
|
||||||
"prefs_notifications_sound_title": "Meldingsgeluid",
|
"prefs_notifications_sound_title": "Meldingsgeluid",
|
||||||
"prefs_notifications_sound_description_none": "Notificaties zullen geen geluid geven",
|
"prefs_notifications_sound_description_none": "Notificaties zullen geen geluid geven",
|
||||||
"prefs_notifications_sound_play": "Geselecteerd geluid afspelen",
|
"prefs_notifications_sound_play": "Geselecteerd geluid afspelen",
|
||||||
"prefs_notifications_sound_description_some": "Inkomende notificaties zullen het {{sound}} geluid afspelen",
|
"prefs_notifications_sound_description_some": "Inkomende notificaties zullen het {{sound}} geluid afspelen",
|
||||||
"prefs_notifications_sound_no_sound": "Geen geluid",
|
"prefs_notifications_sound_no_sound": "Geen geluid",
|
||||||
"prefs_notifications_min_priority_title": "Minimale prioriteit",
|
"prefs_notifications_min_priority_title": "Minimale prioriteit",
|
||||||
"prefs_notifications_min_priority_description_any": "Toon alle notificaties, ongeacht prioriteit",
|
"prefs_notifications_min_priority_description_any": "Toon alle notificaties, ongeacht prioriteit",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Toon notificaties als prioriteit {{number}} ({{name}}) is of hoger",
|
"prefs_notifications_min_priority_description_x_or_higher": "Toon notificaties als prioriteit {{number}} ({{name}}) is of hoger",
|
||||||
"prefs_notifications_min_priority_description_max": "Toon notificaties als prioriteit 5 (maximaal) is",
|
"prefs_notifications_min_priority_description_max": "Toon notificaties als prioriteit 5 (maximaal) is",
|
||||||
"prefs_notifications_min_priority_any": "Elke prioriteit",
|
"prefs_notifications_min_priority_any": "Elke prioriteit",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Lage prioriteit en hoger",
|
"prefs_notifications_min_priority_low_and_higher": "Lage prioriteit en hoger",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Standaard prioriteit en hoger",
|
"prefs_notifications_min_priority_default_and_higher": "Standaard prioriteit en hoger",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Hoge prioriteit en hoger",
|
"prefs_notifications_min_priority_high_and_higher": "Hoge prioriteit en hoger",
|
||||||
"prefs_notifications_min_priority_max_only": "Alleen maximale prioriteit",
|
"prefs_notifications_min_priority_max_only": "Alleen maximale prioriteit",
|
||||||
"prefs_notifications_delete_after_title": "Notificaties verwijderen",
|
"prefs_notifications_delete_after_title": "Notificaties verwijderen",
|
||||||
"prefs_notifications_delete_after_never": "Nooit",
|
"prefs_notifications_delete_after_never": "Nooit",
|
||||||
"prefs_notifications_delete_after_three_hours": "Na drie uur",
|
"prefs_notifications_delete_after_three_hours": "Na drie uur",
|
||||||
"prefs_notifications_delete_after_one_day": "Na één dag",
|
"prefs_notifications_delete_after_one_day": "Na één dag",
|
||||||
"prefs_notifications_delete_after_never_description": "Notificaties worden nooit automatisch verwijderd",
|
"prefs_notifications_delete_after_never_description": "Notificaties worden nooit automatisch verwijderd",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Notificaties worden na drie uur automatisch verwijderd",
|
"prefs_notifications_delete_after_three_hours_description": "Notificaties worden na drie uur automatisch verwijderd",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Notificaties worden na één dag automatisch verwijderd",
|
"prefs_notifications_delete_after_one_day_description": "Notificaties worden na één dag automatisch verwijderd",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Notificaties worden na één week automatisch verwijderd",
|
"prefs_notifications_delete_after_one_week_description": "Notificaties worden na één week automatisch verwijderd",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Notificaties worden na één maand automatisch verwijderd",
|
"prefs_notifications_delete_after_one_month_description": "Notificaties worden na één maand automatisch verwijderd",
|
||||||
"prefs_users_title": "Gebruikers beheren",
|
"prefs_users_title": "Gebruikers beheren",
|
||||||
"prefs_users_description": "Gebruikers voor beveiligde onderwerpen kunnen hier toegevoegd of verwijderd worden. Let op: gebruikersnaam en wachtwoord worden opgeslagen in lokale browser opslag.",
|
"prefs_users_description": "Gebruikers voor beveiligde onderwerpen kunnen hier toegevoegd of verwijderd worden. Let op: gebruikersnaam en wachtwoord worden opgeslagen in lokale browser opslag.",
|
||||||
"prefs_users_table": "Gebruikerstabel",
|
"prefs_users_table": "Gebruikerstabel",
|
||||||
"prefs_users_add_button": "Gebruiker toevoegen",
|
"prefs_users_add_button": "Gebruiker toevoegen",
|
||||||
"prefs_users_edit_button": "Gebruiker bewerken",
|
"prefs_users_edit_button": "Gebruiker bewerken",
|
||||||
"prefs_users_table_user_header": "Gebruiker",
|
"prefs_users_table_user_header": "Gebruiker",
|
||||||
"prefs_users_table_base_url_header": "Service URL",
|
"prefs_users_table_base_url_header": "Service URL",
|
||||||
"prefs_users_dialog_base_url_label": "Service URL, bijv. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "Service URL, bijv. https://ntfy.sh",
|
||||||
"prefs_users_dialog_username_label": "Gebruikersnaam, bijv. phil",
|
"prefs_users_dialog_username_label": "Gebruikersnaam, bijv. phil",
|
||||||
"prefs_users_dialog_button_cancel": "Annuleren",
|
"prefs_users_dialog_button_cancel": "Annuleren",
|
||||||
"prefs_users_dialog_button_add": "Toevoegen",
|
"prefs_users_dialog_button_add": "Toevoegen",
|
||||||
"prefs_users_dialog_button_save": "Bewaren",
|
"prefs_users_dialog_button_save": "Bewaren",
|
||||||
"prefs_appearance_title": "Weergave",
|
"prefs_appearance_title": "Weergave",
|
||||||
"prefs_appearance_language_title": "Taal",
|
"prefs_appearance_language_title": "Taal",
|
||||||
"priority_min": "min",
|
"priority_min": "min",
|
||||||
"priority_low": "laag",
|
"priority_low": "laag",
|
||||||
"priority_default": "standaard",
|
"priority_default": "standaard",
|
||||||
"priority_high": "hoog",
|
"priority_high": "hoog",
|
||||||
"priority_max": "max",
|
"priority_max": "max",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Privé / incognito browservensters worden niet ondersteund"
|
"error_boundary_unsupported_indexeddb_title": "Privé / incognito browservensters worden niet ondersteund"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_send_test_notification": "Wyślij powiadomienie testowe",
|
"action_bar_send_test_notification": "Wyślij powiadomienie testowe",
|
||||||
"action_bar_clear_notifications": "Wyczyść powiadomienia",
|
"action_bar_clear_notifications": "Wyczyść powiadomienia",
|
||||||
"action_bar_toggle_mute": "Włączanie/wyłączanie wyciszania powiadomień",
|
"action_bar_toggle_mute": "Włączanie/wyłączanie wyciszania powiadomień",
|
||||||
"action_bar_toggle_action_menu": "Otwórz/zamknij menu działań",
|
"action_bar_toggle_action_menu": "Otwórz/zamknij menu działań",
|
||||||
"message_bar_type_message": "Wpisz wiadomość tutaj",
|
"message_bar_type_message": "Wpisz wiadomość tutaj",
|
||||||
"message_bar_error_publishing": "Błąd przy wysyłaniu powiadomienia",
|
"message_bar_error_publishing": "Błąd przy wysyłaniu powiadomienia",
|
||||||
"message_bar_show_dialog": "Pokaż okno dialogowe publikacji",
|
"message_bar_show_dialog": "Pokaż okno dialogowe publikacji",
|
||||||
"nav_button_all_notifications": "Wszystkie powiadomienia",
|
"nav_button_all_notifications": "Wszystkie powiadomienia",
|
||||||
"nav_button_documentation": "Dokumentacja",
|
"nav_button_documentation": "Dokumentacja",
|
||||||
"nav_button_muted": "Powiadomienia wyciszone",
|
"nav_button_muted": "Powiadomienia wyciszone",
|
||||||
"alert_grant_title": "Powiadomienia są wyłączone",
|
"alert_grant_title": "Powiadomienia są wyłączone",
|
||||||
"alert_grant_description": "Udziel przeglądarce pozwolenia na wyświetlanie powiadomień na pulpicie.",
|
"alert_grant_description": "Udziel przeglądarce pozwolenia na wyświetlanie powiadomień na pulpicie.",
|
||||||
"alert_grant_button": "Pozwól teraz",
|
"alert_grant_button": "Pozwól teraz",
|
||||||
"alert_not_supported_title": "Powiadomienia nie są obsługiwane",
|
"alert_not_supported_title": "Powiadomienia nie są obsługiwane",
|
||||||
"alert_not_supported_description": "Powiadomienia nie są obsługiwane przez Twoją przeglądarkę.",
|
"alert_not_supported_description": "Powiadomienia nie są obsługiwane przez Twoją przeglądarkę.",
|
||||||
"notifications_list": "Lista powiadomień",
|
"notifications_list": "Lista powiadomień",
|
||||||
"notifications_list_item": "Powiadomienie",
|
"notifications_list_item": "Powiadomienie",
|
||||||
"notifications_mark_read": "Oznacz jako przeczytane",
|
"notifications_mark_read": "Oznacz jako przeczytane",
|
||||||
"notifications_delete": "Usuń",
|
"notifications_delete": "Usuń",
|
||||||
"notifications_copied_to_clipboard": "Skopiowano do schowka",
|
"notifications_copied_to_clipboard": "Skopiowano do schowka",
|
||||||
"notifications_tags": "Tagi",
|
"notifications_tags": "Tagi",
|
||||||
"message_bar_publish": "Opublikuj powiadomienie",
|
"message_bar_publish": "Opublikuj powiadomienie",
|
||||||
"nav_topics_title": "Subskrybowane tematy",
|
"nav_topics_title": "Subskrybowane tematy",
|
||||||
"nav_button_settings": "Ustawienia",
|
"nav_button_settings": "Ustawienia",
|
||||||
"nav_button_publish_message": "Opublikuj powiadomienie",
|
"nav_button_publish_message": "Opublikuj powiadomienie",
|
||||||
"nav_button_subscribe": "Zasubskrybuj temat",
|
"nav_button_subscribe": "Zasubskrybuj temat",
|
||||||
"nav_button_connecting": "łączenie",
|
"nav_button_connecting": "łączenie",
|
||||||
"notifications_attachment_image": "Obraz załącznika",
|
"notifications_attachment_image": "Obraz załącznika",
|
||||||
"notifications_attachment_copy_url_button": "Kopiuj Adres URL",
|
"notifications_attachment_copy_url_button": "Kopiuj Adres URL",
|
||||||
"notifications_attachment_link_expires": "Łącze wygasa w dniu {{date}}",
|
"notifications_attachment_link_expires": "Łącze wygasa w dniu {{date}}",
|
||||||
"notifications_attachment_link_expired": "Łącze do pobrania wygasło",
|
"notifications_attachment_link_expired": "Łącze do pobrania wygasło",
|
||||||
"notifications_attachment_file_image": "plik graficzny",
|
"notifications_attachment_file_image": "plik graficzny",
|
||||||
"notifications_attachment_file_video": "plik wideo",
|
"notifications_attachment_file_video": "plik wideo",
|
||||||
"notifications_attachment_file_audio": "plik audio",
|
"notifications_attachment_file_audio": "plik audio",
|
||||||
"notifications_attachment_file_app": "plik aplikacji Android",
|
"notifications_attachment_file_app": "plik aplikacji Android",
|
||||||
"notifications_attachment_file_document": "inny dokument",
|
"notifications_attachment_file_document": "inny dokument",
|
||||||
"notifications_click_copy_url_title": "Skopiuj adres URL do schowka",
|
"notifications_click_copy_url_title": "Skopiuj adres URL do schowka",
|
||||||
"notifications_click_open_button": "Otwórz łącze",
|
"notifications_click_open_button": "Otwórz łącze",
|
||||||
"notifications_actions_open_url_title": "Przejdź do {{url}}",
|
"notifications_actions_open_url_title": "Przejdź do {{url}}",
|
||||||
"notifications_actions_not_supported": "Ta akcja nie jest obsługiwana w aplikacji internetowej",
|
"notifications_actions_not_supported": "Ta akcja nie jest obsługiwana w aplikacji internetowej",
|
||||||
"notifications_actions_http_request_title": "Wyślij HTTP {{method}} do {{url}}",
|
"notifications_actions_http_request_title": "Wyślij HTTP {{method}} do {{url}}",
|
||||||
"notifications_none_for_topic_title": "Nie otrzymałeś jeszcze żadnych powiadomień dla tego tematu.",
|
"notifications_none_for_topic_title": "Nie otrzymałeś jeszcze żadnych powiadomień dla tego tematu.",
|
||||||
"notifications_none_for_any_description": "Aby wysłać powiadomienia do tematu, wyślij PUT/POST do adresu URL tematu. Oto przykład z jednym z twoich tematów.",
|
"notifications_none_for_any_description": "Aby wysłać powiadomienia do tematu, wyślij PUT/POST do adresu URL tematu. Oto przykład z jednym z twoich tematów.",
|
||||||
"notifications_no_subscriptions_title": "Wygląda na to, że nie masz jeszcze żadnych subskrypcji.",
|
"notifications_no_subscriptions_title": "Wygląda na to, że nie masz jeszcze żadnych subskrypcji.",
|
||||||
"notifications_no_subscriptions_description": "Kliknij łącze \"{{linktext}}\", aby stworzyć lub zasubskrybować temat. Następnie możesz wysyłać wiadomości za pomocą PUT lub POST i otrzymywać powiadomienia tutaj.",
|
"notifications_no_subscriptions_description": "Kliknij łącze \"{{linktext}}\", aby stworzyć lub zasubskrybować temat. Następnie możesz wysyłać wiadomości za pomocą PUT lub POST i otrzymywać powiadomienia tutaj.",
|
||||||
"notifications_example": "Przykład",
|
"notifications_example": "Przykład",
|
||||||
"notifications_loading": "Ładowanie powiadomień …",
|
"notifications_loading": "Ładowanie powiadomień …",
|
||||||
"publish_dialog_title_topic": "Opublikuj do {{topic}}",
|
"publish_dialog_title_topic": "Opublikuj do {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Opublikuj powiadomienie",
|
"publish_dialog_title_no_topic": "Opublikuj powiadomienie",
|
||||||
"publish_dialog_progress_uploading": "Przesyłanie …",
|
"publish_dialog_progress_uploading": "Przesyłanie …",
|
||||||
"publish_dialog_progress_uploading_detail": "Przesyłanie {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Przesyłanie {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_message_published": "Powiadomienie wysłane",
|
"publish_dialog_message_published": "Powiadomienie wysłane",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "przekracza limit rozmiaru pliku {{fileSizeLimit}}, pozostaje {{remainingBytes}}",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "przekracza limit rozmiaru pliku {{fileSizeLimit}}, pozostaje {{remainingBytes}}",
|
||||||
"publish_dialog_attachment_limits_file_reached": "przekracza limit rozmiaru pliku {{filesizeLimit}}",
|
"publish_dialog_attachment_limits_file_reached": "przekracza limit rozmiaru pliku {{filesizeLimit}}",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "przekracza limit, {{remainingBytes}} pozostało",
|
"publish_dialog_attachment_limits_quota_reached": "przekracza limit, {{remainingBytes}} pozostało",
|
||||||
"publish_dialog_emoji_picker_show": "Wybierz emotkę",
|
"publish_dialog_emoji_picker_show": "Wybierz emotkę",
|
||||||
"publish_dialog_priority_min": "Min. priorytet",
|
"publish_dialog_priority_min": "Min. priorytet",
|
||||||
"publish_dialog_priority_low": "Niski priorytet",
|
"publish_dialog_priority_low": "Niski priorytet",
|
||||||
"publish_dialog_base_url_label": "Adres URL usługi",
|
"publish_dialog_base_url_label": "Adres URL usługi",
|
||||||
"publish_dialog_base_url_placeholder": "Adres URL usługi, np. https://example.com",
|
"publish_dialog_base_url_placeholder": "Adres URL usługi, np. https://example.com",
|
||||||
"publish_dialog_topic_label": "Nazwa tematu",
|
"publish_dialog_topic_label": "Nazwa tematu",
|
||||||
"publish_dialog_topic_placeholder": "Nazwa tematu, np. moje_alerty",
|
"publish_dialog_topic_placeholder": "Nazwa tematu, np. moje_alerty",
|
||||||
"publish_dialog_topic_reset": "Resetuj temat",
|
"publish_dialog_topic_reset": "Resetuj temat",
|
||||||
"publish_dialog_title_label": "Tytuł",
|
"publish_dialog_title_label": "Tytuł",
|
||||||
"publish_dialog_title_placeholder": "Tytuł notyfikacji, np. Niski poziom baterrii",
|
"publish_dialog_title_placeholder": "Tytuł notyfikacji, np. Niski poziom baterrii",
|
||||||
"publish_dialog_message_label": "Wiadomość",
|
"publish_dialog_message_label": "Wiadomość",
|
||||||
"publish_dialog_message_placeholder": "Wpisz wiadomość tutaj",
|
"publish_dialog_message_placeholder": "Wpisz wiadomość tutaj",
|
||||||
"publish_dialog_tags_label": "Tagi",
|
"publish_dialog_tags_label": "Tagi",
|
||||||
"publish_dialog_tags_placeholder": "Lista tagów oddzielona przecinkami, np. ostrzeżenie, srv1-backup",
|
"publish_dialog_tags_placeholder": "Lista tagów oddzielona przecinkami, np. ostrzeżenie, srv1-backup",
|
||||||
"publish_dialog_priority_label": "Priorytet",
|
"publish_dialog_priority_label": "Priorytet",
|
||||||
"publish_dialog_click_label": "Kliknij Adres URL",
|
"publish_dialog_click_label": "Kliknij Adres URL",
|
||||||
"publish_dialog_click_placeholder": "Adres URL, który ma być otwarty po kliknięciu na powiadomienie",
|
"publish_dialog_click_placeholder": "Adres URL, który ma być otwarty po kliknięciu na powiadomienie",
|
||||||
"publish_dialog_click_reset": "Usuń adres URL kliknięcia",
|
"publish_dialog_click_reset": "Usuń adres URL kliknięcia",
|
||||||
"publish_dialog_email_label": "Email",
|
"publish_dialog_email_label": "Email",
|
||||||
"publish_dialog_email_placeholder": "Adres, na który ma być wysłane powiadomienie, np. phil@example.com",
|
"publish_dialog_email_placeholder": "Adres, na który ma być wysłane powiadomienie, np. phil@example.com",
|
||||||
"publish_dialog_email_reset": "Usuń przekazywanie wiadomości email",
|
"publish_dialog_email_reset": "Usuń przekazywanie wiadomości email",
|
||||||
"publish_dialog_attach_label": "Adres URL załącznika",
|
"publish_dialog_attach_label": "Adres URL załącznika",
|
||||||
"publish_dialog_attach_placeholder": "Dołączenie pliku z adresu URL, np. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Dołączenie pliku z adresu URL, np. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_attach_reset": "Usuń adres URL załącznika",
|
"publish_dialog_attach_reset": "Usuń adres URL załącznika",
|
||||||
"publish_dialog_filename_label": "Nazwa pliku",
|
"publish_dialog_filename_label": "Nazwa pliku",
|
||||||
"publish_dialog_filename_placeholder": "Nazwa pliku załącznika",
|
"publish_dialog_filename_placeholder": "Nazwa pliku załącznika",
|
||||||
"publish_dialog_delay_label": "Opóźnienie",
|
"publish_dialog_delay_label": "Opóźnienie",
|
||||||
"publish_dialog_delay_reset": "Usuń opóźnione dostarczenie",
|
"publish_dialog_delay_reset": "Usuń opóźnione dostarczenie",
|
||||||
"publish_dialog_other_features": "Inne funkcje:",
|
"publish_dialog_other_features": "Inne funkcje:",
|
||||||
"publish_dialog_chip_click_label": "Adres URL kliknięcia",
|
"publish_dialog_chip_click_label": "Adres URL kliknięcia",
|
||||||
"publish_dialog_chip_email_label": "Przekaż na email",
|
"publish_dialog_chip_email_label": "Przekaż na email",
|
||||||
"publish_dialog_chip_attach_url_label": "Dołącz plik z adresu URL",
|
"publish_dialog_chip_attach_url_label": "Dołącz plik z adresu URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Dołącz plik lokalny",
|
"publish_dialog_chip_attach_file_label": "Dołącz plik lokalny",
|
||||||
"publish_dialog_chip_delay_label": "Opóźnienie dostawy",
|
"publish_dialog_chip_delay_label": "Opóźnienie dostawy",
|
||||||
"publish_dialog_chip_topic_label": "Zmień temat",
|
"publish_dialog_chip_topic_label": "Zmień temat",
|
||||||
"publish_dialog_details_examples_description": "Przykłady i szczegółowe informacje na temat wszystkich opcji można znaleźć w <docsLink>dokumentacji</docsLink>.",
|
"publish_dialog_details_examples_description": "Przykłady i szczegółowe informacje na temat wszystkich opcji można znaleźć w <docsLink>dokumentacji</docsLink>.",
|
||||||
"publish_dialog_button_cancel_sending": "Anuluj wysyłanie",
|
"publish_dialog_button_cancel_sending": "Anuluj wysyłanie",
|
||||||
"publish_dialog_button_send": "Wyślij",
|
"publish_dialog_button_send": "Wyślij",
|
||||||
"publish_dialog_checkbox_publish_another": "Wyślij kolejną wiadomość",
|
"publish_dialog_checkbox_publish_another": "Wyślij kolejną wiadomość",
|
||||||
"publish_dialog_attached_file_title": "Załączony plik:",
|
"publish_dialog_attached_file_title": "Załączony plik:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Nazwa pliku załącznika",
|
"publish_dialog_attached_file_filename_placeholder": "Nazwa pliku załącznika",
|
||||||
"publish_dialog_drop_file_here": "Upuść plik tutaj",
|
"publish_dialog_drop_file_here": "Upuść plik tutaj",
|
||||||
"emoji_picker_search_placeholder": "Szukaj emotki",
|
"emoji_picker_search_placeholder": "Szukaj emotki",
|
||||||
"emoji_picker_search_clear": "Wyczyść wyszukiwanie",
|
"emoji_picker_search_clear": "Wyczyść wyszukiwanie",
|
||||||
"subscribe_dialog_subscribe_title": "Zasubskrybuj temat",
|
"subscribe_dialog_subscribe_title": "Zasubskrybuj temat",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Nazwa tematu, np. moje_alerty",
|
"subscribe_dialog_subscribe_topic_placeholder": "Nazwa tematu, np. moje_alerty",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Użyj innego serwera",
|
"subscribe_dialog_subscribe_use_another_label": "Użyj innego serwera",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "Adres URL usługi",
|
"subscribe_dialog_subscribe_base_url_label": "Adres URL usługi",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Anuluj",
|
"subscribe_dialog_subscribe_button_cancel": "Anuluj",
|
||||||
"subscribe_dialog_login_description": "Ten temat jest chroniony hasłem. Proszę podać nazwę użytkownika i hasło, aby zasubskrybować.",
|
"subscribe_dialog_login_description": "Ten temat jest chroniony hasłem. Proszę podać nazwę użytkownika i hasło, aby zasubskrybować.",
|
||||||
"subscribe_dialog_login_username_label": "Nazwa użytkownika, np. phil",
|
"subscribe_dialog_login_username_label": "Nazwa użytkownika, np. phil",
|
||||||
"subscribe_dialog_login_password_label": "Hasło",
|
"subscribe_dialog_login_password_label": "Hasło",
|
||||||
"publish_dialog_button_cancel": "Anuluj",
|
"publish_dialog_button_cancel": "Anuluj",
|
||||||
"subscribe_dialog_login_button_back": "Powrót",
|
"subscribe_dialog_login_button_back": "Powrót",
|
||||||
"subscribe_dialog_login_button_login": "Zaloguj się",
|
"subscribe_dialog_login_button_login": "Zaloguj się",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Użytkownik {{username}} nie ma uprawnień",
|
"subscribe_dialog_error_user_not_authorized": "Użytkownik {{username}} nie ma uprawnień",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonim",
|
"subscribe_dialog_error_user_anonymous": "anonim",
|
||||||
"prefs_notifications_title": "Powiadomienia",
|
"prefs_notifications_title": "Powiadomienia",
|
||||||
"prefs_notifications_sound_title": "Dźwięk powiadomienia",
|
"prefs_notifications_sound_title": "Dźwięk powiadomienia",
|
||||||
"prefs_notifications_sound_description_none": "Brak dźwięku po otrzymaniu powiadomienia",
|
"prefs_notifications_sound_description_none": "Brak dźwięku po otrzymaniu powiadomienia",
|
||||||
"prefs_notifications_sound_description_some": "Odtwarzaj dźwięk {{sound}}, gdy nadejdzie powiadomienie",
|
"prefs_notifications_sound_description_some": "Odtwarzaj dźwięk {{sound}}, gdy nadejdzie powiadomienie",
|
||||||
"prefs_notifications_sound_play": "Odtwórz wybrany dźwięk",
|
"prefs_notifications_sound_play": "Odtwórz wybrany dźwięk",
|
||||||
"prefs_notifications_min_priority_title": "Minimalny priorytet",
|
"prefs_notifications_min_priority_title": "Minimalny priorytet",
|
||||||
"prefs_notifications_min_priority_description_any": "Pokaż wszystkie powiadomienia, niezależnie od priorytetu",
|
"prefs_notifications_min_priority_description_any": "Pokaż wszystkie powiadomienia, niezależnie od priorytetu",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Pokazuj powiadomienia, gdy ich priorytet to {{number}} ({{name}}) lub wyższy",
|
"prefs_notifications_min_priority_description_x_or_higher": "Pokazuj powiadomienia, gdy ich priorytet to {{number}} ({{name}}) lub wyższy",
|
||||||
"prefs_notifications_min_priority_description_max": "Pokaż powiadomienia, jeśli priorytet wynosi 5 (max)",
|
"prefs_notifications_min_priority_description_max": "Pokaż powiadomienia, jeśli priorytet wynosi 5 (max)",
|
||||||
"prefs_notifications_min_priority_any": "Dowolny priorytet",
|
"prefs_notifications_min_priority_any": "Dowolny priorytet",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Niski priorytet i wyższy",
|
"prefs_notifications_min_priority_low_and_higher": "Niski priorytet i wyższy",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Priorytet standardowy i wyższy",
|
"prefs_notifications_min_priority_default_and_higher": "Priorytet standardowy i wyższy",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Wysoki priorytet i wyższy",
|
"prefs_notifications_min_priority_high_and_higher": "Wysoki priorytet i wyższy",
|
||||||
"prefs_notifications_delete_after_one_day": "Po jednym dniu",
|
"prefs_notifications_delete_after_one_day": "Po jednym dniu",
|
||||||
"prefs_notifications_delete_after_one_week": "Po tygodniu",
|
"prefs_notifications_delete_after_one_week": "Po tygodniu",
|
||||||
"prefs_notifications_delete_after_one_month": "Po miesiącu",
|
"prefs_notifications_delete_after_one_month": "Po miesiącu",
|
||||||
"prefs_notifications_delete_after_never_description": "Powiadomienia nigdy nie są automatycznie usuwane",
|
"prefs_notifications_delete_after_never_description": "Powiadomienia nigdy nie są automatycznie usuwane",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Powiadomienia są automatycznie usuwane po trzech godzinach",
|
"prefs_notifications_delete_after_three_hours_description": "Powiadomienia są automatycznie usuwane po trzech godzinach",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Powiadomienia są automatycznie usuwane po jednym dniu",
|
"prefs_notifications_delete_after_one_day_description": "Powiadomienia są automatycznie usuwane po jednym dniu",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Powiadomienia są automatycznie usuwane po upływie jednego miesiąca",
|
"prefs_notifications_delete_after_one_month_description": "Powiadomienia są automatycznie usuwane po upływie jednego miesiąca",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Powiadomienia są automatycznie usuwane po upływie jedego tygodnia",
|
"prefs_notifications_delete_after_one_week_description": "Powiadomienia są automatycznie usuwane po upływie jedego tygodnia",
|
||||||
"prefs_users_title": "Zarządzaj użytkownikami",
|
"prefs_users_title": "Zarządzaj użytkownikami",
|
||||||
"prefs_users_description": "Dodaj/usuń użytkowników dla tematów chronionych hasłem. Uwaga: Nazwa użytkownika i hasło są przechowywane w lokalnej pamięci przeglądarki.",
|
"prefs_users_description": "Dodaj/usuń użytkowników dla tematów chronionych hasłem. Uwaga: Nazwa użytkownika i hasło są przechowywane w lokalnej pamięci przeglądarki.",
|
||||||
"prefs_users_table": "Tabela użytkowników",
|
"prefs_users_table": "Tabela użytkowników",
|
||||||
"prefs_users_add_button": "Dodaj użytkownika",
|
"prefs_users_add_button": "Dodaj użytkownika",
|
||||||
"notifications_attachment_open_button": "Otwórz załącznik",
|
"notifications_attachment_open_button": "Otwórz załącznik",
|
||||||
"prefs_users_edit_button": "Edytuj użytkownika",
|
"prefs_users_edit_button": "Edytuj użytkownika",
|
||||||
"prefs_users_delete_button": "Usuń użytkownika",
|
"prefs_users_delete_button": "Usuń użytkownika",
|
||||||
"prefs_users_table_base_url_header": "Adres URL usługi",
|
"prefs_users_table_base_url_header": "Adres URL usługi",
|
||||||
"prefs_users_dialog_title_add": "Dodaj użytkownika",
|
"prefs_users_dialog_title_add": "Dodaj użytkownika",
|
||||||
"prefs_users_dialog_button_cancel": "Anuluj",
|
"prefs_users_dialog_button_cancel": "Anuluj",
|
||||||
"prefs_users_dialog_button_add": "Dodaj",
|
"prefs_users_dialog_button_add": "Dodaj",
|
||||||
"prefs_users_dialog_button_save": "Zapisz",
|
"prefs_users_dialog_button_save": "Zapisz",
|
||||||
"prefs_appearance_title": "Wygląd",
|
"prefs_appearance_title": "Wygląd",
|
||||||
"prefs_appearance_language_title": "Język",
|
"prefs_appearance_language_title": "Język",
|
||||||
"error_boundary_title": "Oh nie, ntfy przestało działać",
|
"error_boundary_title": "Oh nie, ntfy przestało działać",
|
||||||
"error_boundary_description": "Oczywiście, to nie miało się wydarzyć. Bardzo przepraszam za to.<br/>Jeśli masz minutę, proszę <githubLink>zgłoś to na GitHubie</githubLink>, albo daj nam znać przez <discordLink>Discord</discordLink> lub <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Oczywiście, to nie miało się wydarzyć. Bardzo przepraszam za to.<br/>Jeśli masz minutę, proszę <githubLink>zgłoś to na GitHubie</githubLink>, albo daj nam znać przez <discordLink>Discord</discordLink> lub <matrixLink>Matrix</matrixLink>.",
|
||||||
"error_boundary_button_copy_stack_trace": "Kopiuj stack trace",
|
"error_boundary_button_copy_stack_trace": "Kopiuj stack trace",
|
||||||
"error_boundary_stack_trace": "Stack trace",
|
"error_boundary_stack_trace": "Stack trace",
|
||||||
"error_boundary_gathering_info": "Zbierz więcej informacji …",
|
"error_boundary_gathering_info": "Zbierz więcej informacji …",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Prywatne karty przeglądarki nie są obsługiwane",
|
"error_boundary_unsupported_indexeddb_title": "Prywatne karty przeglądarki nie są obsługiwane",
|
||||||
"action_bar_show_menu": "Pokaż menu",
|
"action_bar_show_menu": "Pokaż menu",
|
||||||
"action_bar_logo_alt": "ntfy logo",
|
"action_bar_logo_alt": "ntfy logo",
|
||||||
"action_bar_unsubscribe": "Zrezygnuj z subskrypcji",
|
"action_bar_unsubscribe": "Zrezygnuj z subskrypcji",
|
||||||
"notifications_attachment_copy_url_title": "Kopiuj adres URL załącznika do schowka",
|
"notifications_attachment_copy_url_title": "Kopiuj adres URL załącznika do schowka",
|
||||||
"action_bar_settings": "Ustawienia",
|
"action_bar_settings": "Ustawienia",
|
||||||
"notifications_priority_x": "Priorytet {{priority}}",
|
"notifications_priority_x": "Priorytet {{priority}}",
|
||||||
"notifications_new_indicator": "Nowe powiadomienie",
|
"notifications_new_indicator": "Nowe powiadomienie",
|
||||||
"notifications_attachment_open_title": "Przejdź do {{url}}",
|
"notifications_attachment_open_title": "Przejdź do {{url}}",
|
||||||
"notifications_click_copy_url_button": "Skopiuj łącze",
|
"notifications_click_copy_url_button": "Skopiuj łącze",
|
||||||
"notifications_none_for_topic_description": "Aby wysłać powiadomienia do tego tematu, wyślij PUT lub POST-Request na adres URL tematu.",
|
"notifications_none_for_topic_description": "Aby wysłać powiadomienia do tego tematu, wyślij PUT lub POST-Request na adres URL tematu.",
|
||||||
"notifications_none_for_any_title": "Nie otrzymałeś żadnych powiadomień.",
|
"notifications_none_for_any_title": "Nie otrzymałeś żadnych powiadomień.",
|
||||||
"notifications_more_details": "Bardziej szczegółowe informacje można znaleźć na <websiteLink>stronie internetowej</websiteLink> oraz w <docsLink>dokumentacji</docsLink>.",
|
"notifications_more_details": "Bardziej szczegółowe informacje można znaleźć na <websiteLink>stronie internetowej</websiteLink> oraz w <docsLink>dokumentacji</docsLink>.",
|
||||||
"publish_dialog_priority_default": "Domyślny priorytet",
|
"publish_dialog_priority_default": "Domyślny priorytet",
|
||||||
"publish_dialog_priority_max": "Max. priorytet",
|
"publish_dialog_priority_max": "Max. priorytet",
|
||||||
"publish_dialog_priority_high": "Wysoki priorytet",
|
"publish_dialog_priority_high": "Wysoki priorytet",
|
||||||
"publish_dialog_delay_placeholder": "Opóźnienie dostarczenie, np.{{unixTimestamp}}, {{relativeTime}}, lub \"{{naturalLanguage}}\" (tylko w języku angielskim)",
|
"publish_dialog_delay_placeholder": "Opóźnienie dostarczenie, np.{{unixTimestamp}}, {{relativeTime}}, lub \"{{naturalLanguage}}\" (tylko w języku angielskim)",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Subskrybuj",
|
"subscribe_dialog_subscribe_button_subscribe": "Subskrybuj",
|
||||||
"prefs_users_table_user_header": "Użytkownik",
|
"prefs_users_table_user_header": "Użytkownik",
|
||||||
"publish_dialog_attached_file_remove": "Usuń załączony plik",
|
"publish_dialog_attached_file_remove": "Usuń załączony plik",
|
||||||
"subscribe_dialog_subscribe_description": "Tematy nie mogą być chronione hasłem, więc wybierz trudną do odgadnięcia nazwę. Po zasubskrybowaniu możesz wysyłać powiadomienia poprzez POST/PUT.",
|
"subscribe_dialog_subscribe_description": "Tematy nie mogą być chronione hasłem, więc wybierz trudną do odgadnięcia nazwę. Po zasubskrybowaniu możesz wysyłać powiadomienia poprzez POST/PUT.",
|
||||||
"subscribe_dialog_login_title": "Wymagane jest zalogowanie się",
|
"subscribe_dialog_login_title": "Wymagane jest zalogowanie się",
|
||||||
"prefs_notifications_delete_after_title": "Usuń powiadomienia",
|
"prefs_notifications_delete_after_title": "Usuń powiadomienia",
|
||||||
"prefs_users_dialog_password_label": "Hasło",
|
"prefs_users_dialog_password_label": "Hasło",
|
||||||
"priority_low": "niski",
|
"priority_low": "niski",
|
||||||
"priority_default": "podstawowy",
|
"priority_default": "podstawowy",
|
||||||
"priority_max": "maksymalny",
|
"priority_max": "maksymalny",
|
||||||
"prefs_notifications_delete_after_three_hours": "Po trzech godzinach",
|
"prefs_notifications_delete_after_three_hours": "Po trzech godzinach",
|
||||||
"prefs_users_dialog_base_url_label": "Adres URL usługi, np. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "Adres URL usługi, np. https://ntfy.sh",
|
||||||
"prefs_notifications_sound_no_sound": "Bez dzwięku",
|
"prefs_notifications_sound_no_sound": "Bez dzwięku",
|
||||||
"prefs_users_dialog_username_label": "Nazwa użytkownika, np. phil",
|
"prefs_users_dialog_username_label": "Nazwa użytkownika, np. phil",
|
||||||
"priority_high": "wysoki",
|
"priority_high": "wysoki",
|
||||||
"prefs_notifications_min_priority_max_only": "Tylko maksymalny priorytet",
|
"prefs_notifications_min_priority_max_only": "Tylko maksymalny priorytet",
|
||||||
"prefs_notifications_delete_after_never": "Nigdy",
|
"prefs_notifications_delete_after_never": "Nigdy",
|
||||||
"prefs_users_dialog_title_edit": "Edytuj użytkownika",
|
"prefs_users_dialog_title_edit": "Edytuj użytkownika",
|
||||||
"priority_min": "minimum",
|
"priority_min": "minimum",
|
||||||
"error_boundary_unsupported_indexeddb_description": "Aplikacja ntfy potrzebuje IndexedDB, aby działać poprawnie, a Twoja przeglądarka nie obsługuje IndexedDB w prywatnych zakładkach.<br/><br/>To denerwujące, ale używanie ntfy w prywatnej zakładce nie ma sensu, ponieważ wszystkie dane są przechowywane w przeglądarce. Więcej informacji można uzyskać <githubLink>w tym wydaniu GitHub</githubLink>, lub na czacie w <discordLink>Discord</discordLink> lub <matrixLink>Matrix</matrixLink>."
|
"error_boundary_unsupported_indexeddb_description": "Aplikacja ntfy potrzebuje IndexedDB, aby działać poprawnie, a Twoja przeglądarka nie obsługuje IndexedDB w prywatnych zakładkach.<br/><br/>To denerwujące, ale używanie ntfy w prywatnej zakładce nie ma sensu, ponieważ wszystkie dane są przechowywane w przeglądarce. Więcej informacji można uzyskać <githubLink>w tym wydaniu GitHub</githubLink>, lub na czacie w <discordLink>Discord</discordLink> lub <matrixLink>Matrix</matrixLink>."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,192 +1,192 @@
|
||||||
{
|
{
|
||||||
"notifications_attachment_open_button": "Abrir anexo",
|
"notifications_attachment_open_button": "Abrir anexo",
|
||||||
"action_bar_clear_notifications": "Limpar todas as notificações",
|
"action_bar_clear_notifications": "Limpar todas as notificações",
|
||||||
"action_bar_unsubscribe": "Desinscrever",
|
"action_bar_unsubscribe": "Desinscrever",
|
||||||
"message_bar_type_message": "Escreva uma mensagem aqui",
|
"message_bar_type_message": "Escreva uma mensagem aqui",
|
||||||
"message_bar_error_publishing": "Erro ao publicar notificação",
|
"message_bar_error_publishing": "Erro ao publicar notificação",
|
||||||
"nav_button_all_notifications": "Todas notificações",
|
"nav_button_all_notifications": "Todas notificações",
|
||||||
"nav_button_settings": "Configurações",
|
"nav_button_settings": "Configurações",
|
||||||
"nav_button_subscribe": "Inscrever no tópico",
|
"nav_button_subscribe": "Inscrever no tópico",
|
||||||
"alert_grant_title": "Notificações estão desativadas",
|
"alert_grant_title": "Notificações estão desativadas",
|
||||||
"alert_grant_description": "Conceder ao navegador permissão para mostrar notificações.",
|
"alert_grant_description": "Conceder ao navegador permissão para mostrar notificações.",
|
||||||
"alert_grant_button": "Conceder agora",
|
"alert_grant_button": "Conceder agora",
|
||||||
"alert_not_supported_title": "Notificações não são suportadas",
|
"alert_not_supported_title": "Notificações não são suportadas",
|
||||||
"alert_not_supported_description": "Notificações não são suportadas pelo seu navagador.",
|
"alert_not_supported_description": "Notificações não são suportadas pelo seu navagador.",
|
||||||
"notifications_copied_to_clipboard": "Copiado para a área de transferência",
|
"notifications_copied_to_clipboard": "Copiado para a área de transferência",
|
||||||
"notifications_tags": "Etiquetas",
|
"notifications_tags": "Etiquetas",
|
||||||
"notifications_attachment_copy_url_title": "Copiar URL do anexo para a área de transferência",
|
"notifications_attachment_copy_url_title": "Copiar URL do anexo para a área de transferência",
|
||||||
"notifications_click_copy_url_title": "Copiar URL do link para a área de transferência",
|
"notifications_click_copy_url_title": "Copiar URL do link para a área de transferência",
|
||||||
"notifications_click_copy_url_button": "Copiar link",
|
"notifications_click_copy_url_button": "Copiar link",
|
||||||
"notifications_click_open_title": "Ir para {{url}}",
|
"notifications_click_open_title": "Ir para {{url}}",
|
||||||
"notifications_click_open_button": "Abrir link",
|
"notifications_click_open_button": "Abrir link",
|
||||||
"notifications_none_for_topic_title": "Você ainda não recebeu nenhuma notificação para esse tópico.",
|
"notifications_none_for_topic_title": "Você ainda não recebeu nenhuma notificação para esse tópico.",
|
||||||
"notifications_none_for_topic_description": "Para enviar notificações para esse tópico, basta usar os métodos PUT ou POST na URL do tópico.",
|
"notifications_none_for_topic_description": "Para enviar notificações para esse tópico, basta usar os métodos PUT ou POST na URL do tópico.",
|
||||||
"notifications_none_for_any_title": "Você ainda não recebeu nenhuma notificação.",
|
"notifications_none_for_any_title": "Você ainda não recebeu nenhuma notificação.",
|
||||||
"notifications_none_for_any_description": "Para enviar notificações a um tópico, basta usar os métodos PUT ou POST para o URL do tópico. Aqui um exemplo usando um dos seus tópicos.",
|
"notifications_none_for_any_description": "Para enviar notificações a um tópico, basta usar os métodos PUT ou POST para o URL do tópico. Aqui um exemplo usando um dos seus tópicos.",
|
||||||
"notifications_no_subscriptions_title": "Parece que você não tem nenhuma inscrição ainda.",
|
"notifications_no_subscriptions_title": "Parece que você não tem nenhuma inscrição ainda.",
|
||||||
"notifications_no_subscriptions_description": "Clique no link \"{{linktext}}\" para criar ou inscrever em um tópico. Depois disso, poderá enviar mensagens via PUT ou POST e você receberá notificações aqui.",
|
"notifications_no_subscriptions_description": "Clique no link \"{{linktext}}\" para criar ou inscrever em um tópico. Depois disso, poderá enviar mensagens via PUT ou POST e você receberá notificações aqui.",
|
||||||
"action_bar_settings": "Configurações",
|
"action_bar_settings": "Configurações",
|
||||||
"action_bar_send_test_notification": "Enviar notificação de teste",
|
"action_bar_send_test_notification": "Enviar notificação de teste",
|
||||||
"nav_button_documentation": "Documentação",
|
"nav_button_documentation": "Documentação",
|
||||||
"nav_button_publish_message": "Publicar notificação",
|
"nav_button_publish_message": "Publicar notificação",
|
||||||
"nav_topics_title": "Tópicos inscritos",
|
"nav_topics_title": "Tópicos inscritos",
|
||||||
"notifications_attachment_open_title": "Ir para {{url}}",
|
"notifications_attachment_open_title": "Ir para {{url}}",
|
||||||
"notifications_attachment_link_expires": "link expira em {{date}}",
|
"notifications_attachment_link_expires": "link expira em {{date}}",
|
||||||
"notifications_attachment_copy_url_button": "Copiar URL",
|
"notifications_attachment_copy_url_button": "Copiar URL",
|
||||||
"notifications_attachment_link_expired": "link para transferência expirado",
|
"notifications_attachment_link_expired": "link para transferência expirado",
|
||||||
"notifications_example": "Exemplo",
|
"notifications_example": "Exemplo",
|
||||||
"notifications_more_details": "Para mais informações, confira <websiteLink>site</websiteLink> ou <docsLink>documentação</docsLink>.",
|
"notifications_more_details": "Para mais informações, confira <websiteLink>site</websiteLink> ou <docsLink>documentação</docsLink>.",
|
||||||
"notifications_loading": "Carregando notificações…",
|
"notifications_loading": "Carregando notificações…",
|
||||||
"subscribe_dialog_error_user_anonymous": "anônimo",
|
"subscribe_dialog_error_user_anonymous": "anônimo",
|
||||||
"prefs_notifications_delete_after_three_hours": "Após três horas",
|
"prefs_notifications_delete_after_three_hours": "Após três horas",
|
||||||
"prefs_notifications_delete_after_one_day": "Após um dia",
|
"prefs_notifications_delete_after_one_day": "Após um dia",
|
||||||
"prefs_notifications_delete_after_one_week": "Após uma semana",
|
"prefs_notifications_delete_after_one_week": "Após uma semana",
|
||||||
"prefs_notifications_delete_after_one_month": "Após um mês",
|
"prefs_notifications_delete_after_one_month": "Após um mês",
|
||||||
"notifications_actions_not_supported": "Ação não suportada no aplicativo web",
|
"notifications_actions_not_supported": "Ação não suportada no aplicativo web",
|
||||||
"notifications_actions_http_request_title": "Enviar HTTP {{method}} para {{url}}",
|
"notifications_actions_http_request_title": "Enviar HTTP {{method}} para {{url}}",
|
||||||
"notifications_actions_open_url_title": "Ir para {{url}}",
|
"notifications_actions_open_url_title": "Ir para {{url}}",
|
||||||
"publish_dialog_title_topic": "Publicar em {{topic}}",
|
"publish_dialog_title_topic": "Publicar em {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Publicar notificação",
|
"publish_dialog_title_no_topic": "Publicar notificação",
|
||||||
"publish_dialog_progress_uploading": "Enviando …",
|
"publish_dialog_progress_uploading": "Enviando …",
|
||||||
"publish_dialog_progress_uploading_detail": "Fazendo upload de {{loaded}}/{{total}} ({{percent}}%)…",
|
"publish_dialog_progress_uploading_detail": "Fazendo upload de {{loaded}}/{{total}} ({{percent}}%)…",
|
||||||
"publish_dialog_message_published": "Notificação publicada",
|
"publish_dialog_message_published": "Notificação publicada",
|
||||||
"publish_dialog_attachment_limits_file_reached": "excede o limite de arquivo {{fileSizeLimit}}",
|
"publish_dialog_attachment_limits_file_reached": "excede o limite de arquivo {{fileSizeLimit}}",
|
||||||
"publish_dialog_priority_min": "Prioridade mínima",
|
"publish_dialog_priority_min": "Prioridade mínima",
|
||||||
"publish_dialog_priority_low": "Baixa prioridade",
|
"publish_dialog_priority_low": "Baixa prioridade",
|
||||||
"publish_dialog_priority_default": "Prioridade padrão",
|
"publish_dialog_priority_default": "Prioridade padrão",
|
||||||
"publish_dialog_base_url_label": "URL de serviço",
|
"publish_dialog_base_url_label": "URL de serviço",
|
||||||
"publish_dialog_base_url_placeholder": "URL de serviço, por exemplo https://example.com",
|
"publish_dialog_base_url_placeholder": "URL de serviço, por exemplo https://example.com",
|
||||||
"publish_dialog_topic_label": "Nome do tópico",
|
"publish_dialog_topic_label": "Nome do tópico",
|
||||||
"publish_dialog_topic_placeholder": "Nome do tópico, por exemplo, phil_alerts",
|
"publish_dialog_topic_placeholder": "Nome do tópico, por exemplo, phil_alerts",
|
||||||
"publish_dialog_title_label": "Título",
|
"publish_dialog_title_label": "Título",
|
||||||
"publish_dialog_title_placeholder": "Título da notificação, por exemplo Alerta de espaço em disco",
|
"publish_dialog_title_placeholder": "Título da notificação, por exemplo Alerta de espaço em disco",
|
||||||
"publish_dialog_message_label": "Mensagem",
|
"publish_dialog_message_label": "Mensagem",
|
||||||
"publish_dialog_message_placeholder": "Digite uma mensagem aqui",
|
"publish_dialog_message_placeholder": "Digite uma mensagem aqui",
|
||||||
"publish_dialog_tags_label": "Etiquetas",
|
"publish_dialog_tags_label": "Etiquetas",
|
||||||
"publish_dialog_tags_placeholder": "Lista de etiquetas, separadas por vírgula, por exemplo: srv1-backup",
|
"publish_dialog_tags_placeholder": "Lista de etiquetas, separadas por vírgula, por exemplo: srv1-backup",
|
||||||
"publish_dialog_priority_label": "Prioridade",
|
"publish_dialog_priority_label": "Prioridade",
|
||||||
"publish_dialog_click_label": "Clique em URL",
|
"publish_dialog_click_label": "Clique em URL",
|
||||||
"publish_dialog_click_placeholder": "URL que é aberto quando a notificação é clicada",
|
"publish_dialog_click_placeholder": "URL que é aberto quando a notificação é clicada",
|
||||||
"publish_dialog_email_label": "Email",
|
"publish_dialog_email_label": "Email",
|
||||||
"publish_dialog_email_placeholder": "Email para encaminhar a notificação, por exemplo phil@example.com",
|
"publish_dialog_email_placeholder": "Email para encaminhar a notificação, por exemplo phil@example.com",
|
||||||
"publish_dialog_filename_label": "Nome do arquivo",
|
"publish_dialog_filename_label": "Nome do arquivo",
|
||||||
"publish_dialog_filename_placeholder": "Nome do arquivo anexado",
|
"publish_dialog_filename_placeholder": "Nome do arquivo anexado",
|
||||||
"publish_dialog_delay_label": "Atraso",
|
"publish_dialog_delay_label": "Atraso",
|
||||||
"publish_dialog_delay_placeholder": "Atraso na entrega, por exemplo {{{unixTimestamp}}, {{relativeTime}}, ou \"{{naturalLanguage}}\" (apenas em inglês)",
|
"publish_dialog_delay_placeholder": "Atraso na entrega, por exemplo {{{unixTimestamp}}, {{relativeTime}}, ou \"{{naturalLanguage}}\" (apenas em inglês)",
|
||||||
"publish_dialog_other_features": "Outros recursos:",
|
"publish_dialog_other_features": "Outros recursos:",
|
||||||
"publish_dialog_chip_click_label": "Clique em URL",
|
"publish_dialog_chip_click_label": "Clique em URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Anexar arquivo local",
|
"publish_dialog_chip_attach_file_label": "Anexar arquivo local",
|
||||||
"publish_dialog_chip_delay_label": "Atraso na entrega",
|
"publish_dialog_chip_delay_label": "Atraso na entrega",
|
||||||
"publish_dialog_chip_topic_label": "Alterar tópico",
|
"publish_dialog_chip_topic_label": "Alterar tópico",
|
||||||
"publish_dialog_button_cancel_sending": "Cancelar o envio",
|
"publish_dialog_button_cancel_sending": "Cancelar o envio",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Nome do arquivo anexado",
|
"publish_dialog_attached_file_filename_placeholder": "Nome do arquivo anexado",
|
||||||
"publish_dialog_drop_file_here": "Solte o arquivo aqui",
|
"publish_dialog_drop_file_here": "Solte o arquivo aqui",
|
||||||
"emoji_picker_search_placeholder": "Pesquisar emoji",
|
"emoji_picker_search_placeholder": "Pesquisar emoji",
|
||||||
"subscribe_dialog_subscribe_title": "Inscrever no tópico",
|
"subscribe_dialog_subscribe_title": "Inscrever no tópico",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Usar outro servidor",
|
"subscribe_dialog_subscribe_use_another_label": "Usar outro servidor",
|
||||||
"subscribe_dialog_subscribe_description": "Os tópicos podem não ser protegidos por senha, então escolha um nome que não seja fácil de adivinhar. Uma vez inscrito, você pode PUT/POST notificações.",
|
"subscribe_dialog_subscribe_description": "Os tópicos podem não ser protegidos por senha, então escolha um nome que não seja fácil de adivinhar. Uma vez inscrito, você pode PUT/POST notificações.",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Nome do tópico, por exemplo phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Nome do tópico, por exemplo phil_alerts",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Cancelar",
|
"subscribe_dialog_subscribe_button_cancel": "Cancelar",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Inscrever",
|
"subscribe_dialog_subscribe_button_subscribe": "Inscrever",
|
||||||
"prefs_notifications_min_priority_description_max": "Mostrar notificações se prioridade for 5 (máxima)",
|
"prefs_notifications_min_priority_description_max": "Mostrar notificações se prioridade for 5 (máxima)",
|
||||||
"prefs_notifications_min_priority_any": "Qualquer prioridade",
|
"prefs_notifications_min_priority_any": "Qualquer prioridade",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Baixa prioridade e acima",
|
"prefs_notifications_min_priority_low_and_higher": "Baixa prioridade e acima",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Prioridade padrão e acima",
|
"prefs_notifications_min_priority_default_and_higher": "Prioridade padrão e acima",
|
||||||
"subscribe_dialog_login_password_label": "Senha",
|
"subscribe_dialog_login_password_label": "Senha",
|
||||||
"subscribe_dialog_login_button_back": "Voltar",
|
"subscribe_dialog_login_button_back": "Voltar",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Alta prioridade e acima",
|
"prefs_notifications_min_priority_high_and_higher": "Alta prioridade e acima",
|
||||||
"prefs_notifications_min_priority_max_only": "Apenas prioridade máxima",
|
"prefs_notifications_min_priority_max_only": "Apenas prioridade máxima",
|
||||||
"prefs_notifications_delete_after_title": "Apagar notificações",
|
"prefs_notifications_delete_after_title": "Apagar notificações",
|
||||||
"prefs_notifications_delete_after_never": "Nunca",
|
"prefs_notifications_delete_after_never": "Nunca",
|
||||||
"prefs_notifications_delete_after_never_description": "Notificações nunca serão auto excluídas",
|
"prefs_notifications_delete_after_never_description": "Notificações nunca serão auto excluídas",
|
||||||
"prefs_users_description": "Adicionar/remover usuários em seus tópicos protegidos. Note que o usuário e senha são salvos no armazenamento local do navegador.",
|
"prefs_users_description": "Adicionar/remover usuários em seus tópicos protegidos. Note que o usuário e senha são salvos no armazenamento local do navegador.",
|
||||||
"prefs_users_add_button": "Adicionar usuário",
|
"prefs_users_add_button": "Adicionar usuário",
|
||||||
"prefs_users_table_user_header": "Usuário",
|
"prefs_users_table_user_header": "Usuário",
|
||||||
"prefs_users_table_base_url_header": "URL de serviço",
|
"prefs_users_table_base_url_header": "URL de serviço",
|
||||||
"prefs_users_dialog_title_add": "Adicionar usuário",
|
"prefs_users_dialog_title_add": "Adicionar usuário",
|
||||||
"prefs_users_dialog_title_edit": "Editar usuário",
|
"prefs_users_dialog_title_edit": "Editar usuário",
|
||||||
"prefs_users_dialog_base_url_label": "URL de serviço, exemplo https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL de serviço, exemplo https://ntfy.sh",
|
||||||
"prefs_users_dialog_username_label": "Usuário, por exemplo phil",
|
"prefs_users_dialog_username_label": "Usuário, por exemplo phil",
|
||||||
"prefs_users_dialog_password_label": "Senha",
|
"prefs_users_dialog_password_label": "Senha",
|
||||||
"prefs_users_dialog_button_cancel": "Cancelar",
|
"prefs_users_dialog_button_cancel": "Cancelar",
|
||||||
"prefs_users_dialog_button_add": "Adicionar",
|
"prefs_users_dialog_button_add": "Adicionar",
|
||||||
"prefs_users_dialog_button_save": "Salvar",
|
"prefs_users_dialog_button_save": "Salvar",
|
||||||
"prefs_appearance_title": "Aparência",
|
"prefs_appearance_title": "Aparência",
|
||||||
"prefs_appearance_language_title": "LInguagem",
|
"prefs_appearance_language_title": "LInguagem",
|
||||||
"priority_min": "minima",
|
"priority_min": "minima",
|
||||||
"priority_low": "baixa",
|
"priority_low": "baixa",
|
||||||
"priority_default": "padrão",
|
"priority_default": "padrão",
|
||||||
"priority_high": "alta",
|
"priority_high": "alta",
|
||||||
"priority_max": "máxima",
|
"priority_max": "máxima",
|
||||||
"error_boundary_title": "Ah não, ntfy parou de funcionar",
|
"error_boundary_title": "Ah não, ntfy parou de funcionar",
|
||||||
"error_boundary_gathering_info": "Coletar mais informações …",
|
"error_boundary_gathering_info": "Coletar mais informações …",
|
||||||
"error_boundary_description": "Isto obviamente não deveria ter acontecido. Lamentamos muito por isto.<br/>Se tiver um minuto, por favor <githubLink> relate isto no GitHub</githubLink>, ou informe-nos através de <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Isto obviamente não deveria ter acontecido. Lamentamos muito por isto.<br/>Se tiver um minuto, por favor <githubLink> relate isto no GitHub</githubLink>, ou informe-nos através de <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>.",
|
||||||
"error_boundary_button_copy_stack_trace": "Copiar rastreamento de pilha",
|
"error_boundary_button_copy_stack_trace": "Copiar rastreamento de pilha",
|
||||||
"error_boundary_stack_trace": "Rastreamento de pilha",
|
"error_boundary_stack_trace": "Rastreamento de pilha",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "excede {{fileSizeLimit}} limite de arquivo e cota, {{remainingBytes}} restante",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "excede {{fileSizeLimit}} limite de arquivo e cota, {{remainingBytes}} restante",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "excede a cota, {{remainingBytes}} restantes",
|
"publish_dialog_attachment_limits_quota_reached": "excede a cota, {{remainingBytes}} restantes",
|
||||||
"publish_dialog_priority_high": "Alta prioridade",
|
"publish_dialog_priority_high": "Alta prioridade",
|
||||||
"publish_dialog_priority_max": "Prioridade máxima",
|
"publish_dialog_priority_max": "Prioridade máxima",
|
||||||
"publish_dialog_button_send": "Enviar",
|
"publish_dialog_button_send": "Enviar",
|
||||||
"publish_dialog_attached_file_title": "Arquivo anexado:",
|
"publish_dialog_attached_file_title": "Arquivo anexado:",
|
||||||
"publish_dialog_attach_label": "URL de anexo",
|
"publish_dialog_attach_label": "URL de anexo",
|
||||||
"publish_dialog_chip_attach_url_label": "Anexar arquivo por URL",
|
"publish_dialog_chip_attach_url_label": "Anexar arquivo por URL",
|
||||||
"publish_dialog_attach_placeholder": "Anexar arquivo por URL, por exemplo, https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Anexar arquivo por URL, por exemplo, https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_chip_email_label": "Encaminhar para email",
|
"publish_dialog_chip_email_label": "Encaminhar para email",
|
||||||
"publish_dialog_checkbox_publish_another": "Publicar outro",
|
"publish_dialog_checkbox_publish_another": "Publicar outro",
|
||||||
"publish_dialog_details_examples_description": "Para obter exemplos e uma descrição detalhada de todos os recursos de envio, consulte a <docsLink>documentação</docsLink>.",
|
"publish_dialog_details_examples_description": "Para obter exemplos e uma descrição detalhada de todos os recursos de envio, consulte a <docsLink>documentação</docsLink>.",
|
||||||
"publish_dialog_button_cancel": "Cancelar",
|
"publish_dialog_button_cancel": "Cancelar",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Notificações são automaticamente excluídas após um dia",
|
"prefs_notifications_delete_after_one_day_description": "Notificações são automaticamente excluídas após um dia",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Notificações são automaticamente excluídas após um mês",
|
"prefs_notifications_delete_after_one_month_description": "Notificações são automaticamente excluídas após um mês",
|
||||||
"prefs_users_title": "Gerenciar usuários",
|
"prefs_users_title": "Gerenciar usuários",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Usuário {{username}} não autorizado",
|
"subscribe_dialog_error_user_not_authorized": "Usuário {{username}} não autorizado",
|
||||||
"prefs_notifications_title": "Notificações",
|
"prefs_notifications_title": "Notificações",
|
||||||
"prefs_notifications_sound_no_sound": "Sem som",
|
"prefs_notifications_sound_no_sound": "Sem som",
|
||||||
"subscribe_dialog_login_title": "Login necessário",
|
"subscribe_dialog_login_title": "Login necessário",
|
||||||
"prefs_notifications_sound_title": "Som de notificações",
|
"prefs_notifications_sound_title": "Som de notificações",
|
||||||
"prefs_notifications_min_priority_title": "Mínima prioridade",
|
"prefs_notifications_min_priority_title": "Mínima prioridade",
|
||||||
"prefs_notifications_min_priority_description_any": "Mostrando todas as notificações, independente da prioridade",
|
"prefs_notifications_min_priority_description_any": "Mostrando todas as notificações, independente da prioridade",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Notificações são automaticamente excluídas após uma semana",
|
"prefs_notifications_delete_after_one_week_description": "Notificações são automaticamente excluídas após uma semana",
|
||||||
"subscribe_dialog_login_description": "Esse tópico é protegido por senha. Por favor digite o nome de usuário e senha para inscrever.",
|
"subscribe_dialog_login_description": "Esse tópico é protegido por senha. Por favor digite o nome de usuário e senha para inscrever.",
|
||||||
"subscribe_dialog_login_username_label": "Nome, por exemplo phil",
|
"subscribe_dialog_login_username_label": "Nome, por exemplo phil",
|
||||||
"subscribe_dialog_login_button_login": "Login",
|
"subscribe_dialog_login_button_login": "Login",
|
||||||
"prefs_notifications_sound_description_none": "Notificações não reproduzem nenhum som quando chegam",
|
"prefs_notifications_sound_description_none": "Notificações não reproduzem nenhum som quando chegam",
|
||||||
"prefs_notifications_sound_description_some": "Notificações reproduzem som {{sound}} quando chegam",
|
"prefs_notifications_sound_description_some": "Notificações reproduzem som {{sound}} quando chegam",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Mostrar notificações se prioridade for {{number}} ({{name}}) ou acima",
|
"prefs_notifications_min_priority_description_x_or_higher": "Mostrar notificações se prioridade for {{number}} ({{name}}) ou acima",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Notificações são automaticamente excluídas após três horas",
|
"prefs_notifications_delete_after_three_hours_description": "Notificações são automaticamente excluídas após três horas",
|
||||||
"publish_dialog_attach_reset": "Remover URL do anexo",
|
"publish_dialog_attach_reset": "Remover URL do anexo",
|
||||||
"publish_dialog_emoji_picker_show": "Escolher emoji",
|
"publish_dialog_emoji_picker_show": "Escolher emoji",
|
||||||
"publish_dialog_attached_file_remove": "Remover arquivo anexado",
|
"publish_dialog_attached_file_remove": "Remover arquivo anexado",
|
||||||
"emoji_picker_search_clear": "Limpar",
|
"emoji_picker_search_clear": "Limpar",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL de subscrição",
|
"subscribe_dialog_subscribe_base_url_label": "URL de subscrição",
|
||||||
"notifications_list": "Lista de notificações",
|
"notifications_list": "Lista de notificações",
|
||||||
"message_bar_show_dialog": "Mostrar caixa de publicação",
|
"message_bar_show_dialog": "Mostrar caixa de publicação",
|
||||||
"publish_dialog_topic_reset": "Resetar tópico",
|
"publish_dialog_topic_reset": "Resetar tópico",
|
||||||
"publish_dialog_delay_reset": "Remover entrega adiada da notificação",
|
"publish_dialog_delay_reset": "Remover entrega adiada da notificação",
|
||||||
"nav_button_connecting": "Conectando",
|
"nav_button_connecting": "Conectando",
|
||||||
"publish_dialog_email_reset": "Remover encaminhar email",
|
"publish_dialog_email_reset": "Remover encaminhar email",
|
||||||
"prefs_notifications_sound_play": "Reproduzir som selecionado",
|
"prefs_notifications_sound_play": "Reproduzir som selecionado",
|
||||||
"action_bar_show_menu": "Mostrar menu",
|
"action_bar_show_menu": "Mostrar menu",
|
||||||
"action_bar_toggle_mute": "Habilita/Desabilita notificações",
|
"action_bar_toggle_mute": "Habilita/Desabilita notificações",
|
||||||
"action_bar_toggle_action_menu": "Abrir/fechar menu de ação",
|
"action_bar_toggle_action_menu": "Abrir/fechar menu de ação",
|
||||||
"action_bar_logo_alt": "nfty logo",
|
"action_bar_logo_alt": "nfty logo",
|
||||||
"message_bar_publish": "Publicar mensagem",
|
"message_bar_publish": "Publicar mensagem",
|
||||||
"nav_button_muted": "Notificações desabilitadas",
|
"nav_button_muted": "Notificações desabilitadas",
|
||||||
"notifications_list_item": "Notificação",
|
"notifications_list_item": "Notificação",
|
||||||
"notifications_mark_read": "Marcar como lido",
|
"notifications_mark_read": "Marcar como lido",
|
||||||
"notifications_delete": "Excluir",
|
"notifications_delete": "Excluir",
|
||||||
"notifications_priority_x": "Prioridade {{priority}}",
|
"notifications_priority_x": "Prioridade {{priority}}",
|
||||||
"notifications_new_indicator": "Nova notificação",
|
"notifications_new_indicator": "Nova notificação",
|
||||||
"notifications_attachment_image": "Imagem anexada",
|
"notifications_attachment_image": "Imagem anexada",
|
||||||
"notifications_attachment_file_image": "Arquivo de imagem",
|
"notifications_attachment_file_image": "Arquivo de imagem",
|
||||||
"notifications_attachment_file_video": "Arquivo de vídeo",
|
"notifications_attachment_file_video": "Arquivo de vídeo",
|
||||||
"notifications_attachment_file_audio": "Arquivo de áudio",
|
"notifications_attachment_file_audio": "Arquivo de áudio",
|
||||||
"notifications_attachment_file_app": "Arquivo apk android",
|
"notifications_attachment_file_app": "Arquivo apk android",
|
||||||
"notifications_attachment_file_document": "Outros documentos",
|
"notifications_attachment_file_document": "Outros documentos",
|
||||||
"publish_dialog_click_reset": "Remover URL clicável",
|
"publish_dialog_click_reset": "Remover URL clicável",
|
||||||
"prefs_users_table": "Tabela de usuários",
|
"prefs_users_table": "Tabela de usuários",
|
||||||
"prefs_users_edit_button": "Editar usuário",
|
"prefs_users_edit_button": "Editar usuário",
|
||||||
"prefs_users_delete_button": "Excluir usuário",
|
"prefs_users_delete_button": "Excluir usuário",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Navegação anônima não suportada",
|
"error_boundary_unsupported_indexeddb_title": "Navegação anônima não suportada",
|
||||||
"error_boundary_unsupported_indexeddb_description": "O ntfy web app precisa do IndexedDB para funcionar, e seu navegador não suporta IndexedDB no modo de navegação privada.<br/><br/>Embora isso seja lamentável, também não faz muito sentido usar o ntfy web app no modo de navegação privada de qualquer maneira, porque tudo é armazenado no armazenamento do navegador. Você pode ler mais sobre isso <githubLink>nesta edição do GitHub</githubLink>, ou falar conosco em <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>."
|
"error_boundary_unsupported_indexeddb_description": "O ntfy web app precisa do IndexedDB para funcionar, e seu navegador não suporta IndexedDB no modo de navegação privada.<br/><br/>Embora isso seja lamentável, também não faz muito sentido usar o ntfy web app no modo de navegação privada de qualquer maneira, porque tudo é armazenado no armazenamento do navegador. Você pode ler mais sobre isso <githubLink>nesta edição do GitHub</githubLink>, ou falar conosco em <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,158 +1,158 @@
|
||||||
{
|
{
|
||||||
"publish_dialog_priority_min": "Мин. приоритет",
|
"publish_dialog_priority_min": "Мин. приоритет",
|
||||||
"action_bar_settings": "Настройки",
|
"action_bar_settings": "Настройки",
|
||||||
"action_bar_send_test_notification": "Отправить тестовое уведомление",
|
"action_bar_send_test_notification": "Отправить тестовое уведомление",
|
||||||
"action_bar_clear_notifications": "Удалить все уведомления",
|
"action_bar_clear_notifications": "Удалить все уведомления",
|
||||||
"action_bar_unsubscribe": "Отписаться",
|
"action_bar_unsubscribe": "Отписаться",
|
||||||
"message_bar_type_message": "Введите сообщение здесь",
|
"message_bar_type_message": "Введите сообщение здесь",
|
||||||
"notifications_none_for_topic_description": "Чтобы отправить уведомление на данную тему, просто отправьте PUT или POST на URL-адрес этой темы.",
|
"notifications_none_for_topic_description": "Чтобы отправить уведомление на данную тему, просто отправьте PUT или POST на URL-адрес этой темы.",
|
||||||
"notifications_none_for_any_description": "Чтобы отправить уведомления на тему, просто отправьте PUT или POST на URL-адрес темы. Вот пример используя одну из ваших тем.",
|
"notifications_none_for_any_description": "Чтобы отправить уведомления на тему, просто отправьте PUT или POST на URL-адрес темы. Вот пример используя одну из ваших тем.",
|
||||||
"notifications_no_subscriptions_title": "Похоже у вас ещё нет подписок.",
|
"notifications_no_subscriptions_title": "Похоже у вас ещё нет подписок.",
|
||||||
"alert_grant_description": "Разрешите браузеру показывать уведомления.",
|
"alert_grant_description": "Разрешите браузеру показывать уведомления.",
|
||||||
"notifications_no_subscriptions_description": "Нажмите \"{{linktext}}\" ссылку, чтобы создать или подписаться на тему. После этого вы сможете отправлять сообщения используя PUT или POST, и вы будете получать здесь уведомления.",
|
"notifications_no_subscriptions_description": "Нажмите \"{{linktext}}\" ссылку, чтобы создать или подписаться на тему. После этого вы сможете отправлять сообщения используя PUT или POST, и вы будете получать здесь уведомления.",
|
||||||
"notifications_example": "Пример",
|
"notifications_example": "Пример",
|
||||||
"notifications_more_details": "Дополнительную информацию найдёте на <websiteLink>сайте</websiteLink> или в <docsLink>документации</docsLink>.",
|
"notifications_more_details": "Дополнительную информацию найдёте на <websiteLink>сайте</websiteLink> или в <docsLink>документации</docsLink>.",
|
||||||
"notifications_loading": "Загружаются уведомления …",
|
"notifications_loading": "Загружаются уведомления …",
|
||||||
"publish_dialog_title_topic": "Опубликовать в {{topic}}",
|
"publish_dialog_title_topic": "Опубликовать в {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Опубликовать уведомление",
|
"publish_dialog_title_no_topic": "Опубликовать уведомление",
|
||||||
"publish_dialog_progress_uploading": "Загружается …",
|
"publish_dialog_progress_uploading": "Загружается …",
|
||||||
"publish_dialog_progress_uploading_detail": "Загружается {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Загружается {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"publish_dialog_message_published": "Уведомление опубликовано",
|
"publish_dialog_message_published": "Уведомление опубликовано",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "превышает {{fileSizeLimit}} размер файла, {{remainingBytes}} осталось",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "превышает {{fileSizeLimit}} размер файла, {{remainingBytes}} осталось",
|
||||||
"publish_dialog_attachment_limits_file_reached": "превышает {{fileSizeLimit}} размер файла",
|
"publish_dialog_attachment_limits_file_reached": "превышает {{fileSizeLimit}} размер файла",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "превышает квоту, {{remainingBytes}} осталось",
|
"publish_dialog_attachment_limits_quota_reached": "превышает квоту, {{remainingBytes}} осталось",
|
||||||
"publish_dialog_priority_low": "Низкий приоритет",
|
"publish_dialog_priority_low": "Низкий приоритет",
|
||||||
"publish_dialog_priority_default": "Приоритет по умолчанию",
|
"publish_dialog_priority_default": "Приоритет по умолчанию",
|
||||||
"publish_dialog_priority_high": "Высокий приоритет",
|
"publish_dialog_priority_high": "Высокий приоритет",
|
||||||
"publish_dialog_priority_max": "Макс. приоритет",
|
"publish_dialog_priority_max": "Макс. приоритет",
|
||||||
"publish_dialog_base_url_label": "URL-адрес сервиса",
|
"publish_dialog_base_url_label": "URL-адрес сервиса",
|
||||||
"publish_dialog_base_url_placeholder": "URL-адрес сервиса, например https://example.com",
|
"publish_dialog_base_url_placeholder": "URL-адрес сервиса, например https://example.com",
|
||||||
"publish_dialog_topic_label": "Название темы",
|
"publish_dialog_topic_label": "Название темы",
|
||||||
"publish_dialog_topic_placeholder": "Название темы, например phil_alerts",
|
"publish_dialog_topic_placeholder": "Название темы, например phil_alerts",
|
||||||
"publish_dialog_title_label": "Заголовок",
|
"publish_dialog_title_label": "Заголовок",
|
||||||
"publish_dialog_title_placeholder": "Заголовок уведомления, например Disk space alert",
|
"publish_dialog_title_placeholder": "Заголовок уведомления, например Disk space alert",
|
||||||
"publish_dialog_message_label": "Сообщение",
|
"publish_dialog_message_label": "Сообщение",
|
||||||
"publish_dialog_message_placeholder": "Текст сообщения",
|
"publish_dialog_message_placeholder": "Текст сообщения",
|
||||||
"publish_dialog_tags_label": "Тэги",
|
"publish_dialog_tags_label": "Тэги",
|
||||||
"publish_dialog_tags_placeholder": "Список тэгов, разделённый запятой, например warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "Список тэгов, разделённый запятой, например warning, srv1-backup",
|
||||||
"publish_dialog_priority_label": "Приоритет",
|
"publish_dialog_priority_label": "Приоритет",
|
||||||
"publish_dialog_click_label": "Нажмите на URL-адрес",
|
"publish_dialog_click_label": "Нажмите на URL-адрес",
|
||||||
"publish_dialog_click_placeholder": "URL-адрес который откроется когда будет нажато уведомление",
|
"publish_dialog_click_placeholder": "URL-адрес который откроется когда будет нажато уведомление",
|
||||||
"publish_dialog_email_label": "Эл. почта",
|
"publish_dialog_email_label": "Эл. почта",
|
||||||
"message_bar_error_publishing": "Ошибка отправки уведомления",
|
"message_bar_error_publishing": "Ошибка отправки уведомления",
|
||||||
"alert_not_supported_title": "Уведомления не поддерживаются",
|
"alert_not_supported_title": "Уведомления не поддерживаются",
|
||||||
"alert_not_supported_description": "Уведомления не поддерживаются вашим браузером.",
|
"alert_not_supported_description": "Уведомления не поддерживаются вашим браузером.",
|
||||||
"notifications_copied_to_clipboard": "Скопировано в буфер обмена",
|
"notifications_copied_to_clipboard": "Скопировано в буфер обмена",
|
||||||
"notifications_attachment_open_button": "Открыть вложение",
|
"notifications_attachment_open_button": "Открыть вложение",
|
||||||
"notifications_none_for_topic_title": "Вы ещё не получали уведомления для этой темы.",
|
"notifications_none_for_topic_title": "Вы ещё не получали уведомления для этой темы.",
|
||||||
"nav_topics_title": "Подписки на темы",
|
"nav_topics_title": "Подписки на темы",
|
||||||
"nav_button_all_notifications": "Все уведомления",
|
"nav_button_all_notifications": "Все уведомления",
|
||||||
"nav_button_settings": "Настройки",
|
"nav_button_settings": "Настройки",
|
||||||
"nav_button_documentation": "Документация",
|
"nav_button_documentation": "Документация",
|
||||||
"nav_button_publish_message": "Опубликовать уведомление",
|
"nav_button_publish_message": "Опубликовать уведомление",
|
||||||
"nav_button_subscribe": "Подписаться на тему",
|
"nav_button_subscribe": "Подписаться на тему",
|
||||||
"alert_grant_button": "Разрешить",
|
"alert_grant_button": "Разрешить",
|
||||||
"notifications_attachment_copy_url_button": "Скопировать URL-адрес",
|
"notifications_attachment_copy_url_button": "Скопировать URL-адрес",
|
||||||
"notifications_attachment_open_title": "Перейти на {{url}}",
|
"notifications_attachment_open_title": "Перейти на {{url}}",
|
||||||
"notifications_attachment_link_expired": "срок действия ссылки для скачивания истёк",
|
"notifications_attachment_link_expired": "срок действия ссылки для скачивания истёк",
|
||||||
"notifications_click_copy_url_button": "Скопировать ссылку",
|
"notifications_click_copy_url_button": "Скопировать ссылку",
|
||||||
"notifications_none_for_any_title": "Вы ещё не получали никаких уведомлений.",
|
"notifications_none_for_any_title": "Вы ещё не получали никаких уведомлений.",
|
||||||
"alert_grant_title": "Уведомления отключены",
|
"alert_grant_title": "Уведомления отключены",
|
||||||
"notifications_attachment_copy_url_title": "Скопировать URL-адрес вложения",
|
"notifications_attachment_copy_url_title": "Скопировать URL-адрес вложения",
|
||||||
"notifications_actions_open_url_title": "Перейти на {{url}}",
|
"notifications_actions_open_url_title": "Перейти на {{url}}",
|
||||||
"notifications_tags": "Тэги",
|
"notifications_tags": "Тэги",
|
||||||
"notifications_attachment_link_expires": "срок действия ссылки истекает {{date}}",
|
"notifications_attachment_link_expires": "срок действия ссылки истекает {{date}}",
|
||||||
"notifications_click_copy_url_title": "Скопировать URL-адрес ссылки",
|
"notifications_click_copy_url_title": "Скопировать URL-адрес ссылки",
|
||||||
"notifications_click_open_button": "Открыть ссылку",
|
"notifications_click_open_button": "Открыть ссылку",
|
||||||
"subscribe_dialog_subscribe_title": "Подписаться на тему",
|
"subscribe_dialog_subscribe_title": "Подписаться на тему",
|
||||||
"publish_dialog_button_cancel": "Отмена",
|
"publish_dialog_button_cancel": "Отмена",
|
||||||
"subscribe_dialog_subscribe_description": "Темы могут быть не защищены паролем, поэтому укажите сложное имя. После подписки вы можете размещать/отправлять уведомления.",
|
"subscribe_dialog_subscribe_description": "Темы могут быть не защищены паролем, поэтому укажите сложное имя. После подписки вы можете размещать/отправлять уведомления.",
|
||||||
"prefs_users_description": "Добавляйте/удаляйте пользователей для защищенных тем. Обратите внимание, что имя пользователя и пароль хранятся в локальном хранилище браузера.",
|
"prefs_users_description": "Добавляйте/удаляйте пользователей для защищенных тем. Обратите внимание, что имя пользователя и пароль хранятся в локальном хранилище браузера.",
|
||||||
"error_boundary_description": "Этого, очевидно, не должно происходить. Очень сожалею об этом. <br/>Если у вас есть минутка, пожалуйста <githubLink>сообщить об этом на GitHub</githubLink>, или сообщите нам через <discordLink>Discord</discordLink> или <matrixLink>Matrix</matrixLink>.",
|
"error_boundary_description": "Этого, очевидно, не должно происходить. Очень сожалею об этом. <br/>Если у вас есть минутка, пожалуйста <githubLink>сообщить об этом на GitHub</githubLink>, или сообщите нам через <discordLink>Discord</discordLink> или <matrixLink>Matrix</matrixLink>.",
|
||||||
"publish_dialog_email_placeholder": "Адрес для пересылки уведомления. Например, phil@example.com",
|
"publish_dialog_email_placeholder": "Адрес для пересылки уведомления. Например, phil@example.com",
|
||||||
"publish_dialog_attach_placeholder": "Прикрепите файл по URL. Например, https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Прикрепите файл по URL. Например, https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_filename_label": "Имя файла",
|
"publish_dialog_filename_label": "Имя файла",
|
||||||
"publish_dialog_delay_label": "Задержка",
|
"publish_dialog_delay_label": "Задержка",
|
||||||
"publish_dialog_delay_placeholder": "Задержка доставки. Например, {{unixTimestamp}}, {{relativeTime}}, or \"{{naturalLanguage}}\" (English only)",
|
"publish_dialog_delay_placeholder": "Задержка доставки. Например, {{unixTimestamp}}, {{relativeTime}}, or \"{{naturalLanguage}}\" (English only)",
|
||||||
"publish_dialog_chip_click_label": "Адрес",
|
"publish_dialog_chip_click_label": "Адрес",
|
||||||
"publish_dialog_chip_email_label": "Переслать на электронную почту",
|
"publish_dialog_chip_email_label": "Переслать на электронную почту",
|
||||||
"publish_dialog_chip_attach_url_label": "Прикрепить файл по URL",
|
"publish_dialog_chip_attach_url_label": "Прикрепить файл по URL",
|
||||||
"publish_dialog_chip_attach_file_label": "Прикрепить локальный файл",
|
"publish_dialog_chip_attach_file_label": "Прикрепить локальный файл",
|
||||||
"publish_dialog_chip_delay_label": "Задержка отправки",
|
"publish_dialog_chip_delay_label": "Задержка отправки",
|
||||||
"publish_dialog_chip_topic_label": "Изменить тему",
|
"publish_dialog_chip_topic_label": "Изменить тему",
|
||||||
"publish_dialog_details_examples_description": "Примеры и подробное описание всех функций см. в e <docsLink>документации</docsLink>.",
|
"publish_dialog_details_examples_description": "Примеры и подробное описание всех функций см. в e <docsLink>документации</docsLink>.",
|
||||||
"publish_dialog_attach_label": "URL-адрес вложения",
|
"publish_dialog_attach_label": "URL-адрес вложения",
|
||||||
"publish_dialog_filename_placeholder": "Имя файла вложения",
|
"publish_dialog_filename_placeholder": "Имя файла вложения",
|
||||||
"publish_dialog_other_features": "Другие возможности:",
|
"publish_dialog_other_features": "Другие возможности:",
|
||||||
"publish_dialog_button_cancel_sending": "Отменить отправку",
|
"publish_dialog_button_cancel_sending": "Отменить отправку",
|
||||||
"publish_dialog_button_send": "Отправить",
|
"publish_dialog_button_send": "Отправить",
|
||||||
"publish_dialog_checkbox_publish_another": "Опубликовать еще",
|
"publish_dialog_checkbox_publish_another": "Опубликовать еще",
|
||||||
"publish_dialog_attached_file_title": "Прикрепленный файл:",
|
"publish_dialog_attached_file_title": "Прикрепленный файл:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Имя прикреплённого файла",
|
"publish_dialog_attached_file_filename_placeholder": "Имя прикреплённого файла",
|
||||||
"emoji_picker_search_placeholder": "Поиск эмодзи",
|
"emoji_picker_search_placeholder": "Поиск эмодзи",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Название темы. Например, phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Название темы. Например, phil_alerts",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Использовать другой сервер",
|
"subscribe_dialog_subscribe_use_another_label": "Использовать другой сервер",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Отмена",
|
"subscribe_dialog_subscribe_button_cancel": "Отмена",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Подписаться",
|
"subscribe_dialog_subscribe_button_subscribe": "Подписаться",
|
||||||
"subscribe_dialog_login_title": "Требуется авторизация",
|
"subscribe_dialog_login_title": "Требуется авторизация",
|
||||||
"subscribe_dialog_login_description": "Эта тема защищена паролем. Пожалуйста, введите имя пользователя и пароль, чтобы подписаться.",
|
"subscribe_dialog_login_description": "Эта тема защищена паролем. Пожалуйста, введите имя пользователя и пароль, чтобы подписаться.",
|
||||||
"subscribe_dialog_login_username_label": "Имя пользователя. Например, phil",
|
"subscribe_dialog_login_username_label": "Имя пользователя. Например, phil",
|
||||||
"subscribe_dialog_login_password_label": "Пароль",
|
"subscribe_dialog_login_password_label": "Пароль",
|
||||||
"subscribe_dialog_login_button_back": "Назад",
|
"subscribe_dialog_login_button_back": "Назад",
|
||||||
"subscribe_dialog_login_button_login": "Войти",
|
"subscribe_dialog_login_button_login": "Войти",
|
||||||
"subscribe_dialog_error_user_not_authorized": "Пользователь {{username}} не авторизован",
|
"subscribe_dialog_error_user_not_authorized": "Пользователь {{username}} не авторизован",
|
||||||
"subscribe_dialog_error_user_anonymous": "аноним",
|
"subscribe_dialog_error_user_anonymous": "аноним",
|
||||||
"prefs_notifications_title": "Уведомления",
|
"prefs_notifications_title": "Уведомления",
|
||||||
"prefs_notifications_sound_title": "Звук уведомления",
|
"prefs_notifications_sound_title": "Звук уведомления",
|
||||||
"prefs_notifications_sound_description_none": "Уведомления не воспроизводят никаких звуков при получении",
|
"prefs_notifications_sound_description_none": "Уведомления не воспроизводят никаких звуков при получении",
|
||||||
"prefs_notifications_sound_no_sound": "Без звука",
|
"prefs_notifications_sound_no_sound": "Без звука",
|
||||||
"prefs_notifications_min_priority_title": "Минимальный приоритет",
|
"prefs_notifications_min_priority_title": "Минимальный приоритет",
|
||||||
"prefs_notifications_min_priority_description_any": "Показать все уведомления, независимо от приоритета",
|
"prefs_notifications_min_priority_description_any": "Показать все уведомления, независимо от приоритета",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Показывать уведомления, если приоритет {{number}} ({{name}}) или выше",
|
"prefs_notifications_min_priority_description_x_or_higher": "Показывать уведомления, если приоритет {{number}} ({{name}}) или выше",
|
||||||
"prefs_notifications_min_priority_description_max": "Показывать уведомления, если приоритет равен 5 (максимум)",
|
"prefs_notifications_min_priority_description_max": "Показывать уведомления, если приоритет равен 5 (максимум)",
|
||||||
"prefs_notifications_min_priority_any": "Любой приоритет",
|
"prefs_notifications_min_priority_any": "Любой приоритет",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Низкий и высокий приоритет",
|
"prefs_notifications_min_priority_low_and_higher": "Низкий и высокий приоритет",
|
||||||
"prefs_notifications_min_priority_max_only": "Только максимальный приоритет",
|
"prefs_notifications_min_priority_max_only": "Только максимальный приоритет",
|
||||||
"prefs_notifications_delete_after_title": "Удалить уведомления",
|
"prefs_notifications_delete_after_title": "Удалить уведомления",
|
||||||
"prefs_notifications_delete_after_never": "Никогда",
|
"prefs_notifications_delete_after_never": "Никогда",
|
||||||
"prefs_notifications_delete_after_three_hours": "Через три часа",
|
"prefs_notifications_delete_after_three_hours": "Через три часа",
|
||||||
"prefs_notifications_sound_description_some": "Уведомления воспроизводят звук {{sound}}",
|
"prefs_notifications_sound_description_some": "Уведомления воспроизводят звук {{sound}}",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Приоритет по умолчанию и высокий",
|
"prefs_notifications_min_priority_default_and_higher": "Приоритет по умолчанию и высокий",
|
||||||
"prefs_notifications_delete_after_one_day": "Через день",
|
"prefs_notifications_delete_after_one_day": "Через день",
|
||||||
"prefs_notifications_delete_after_one_week": "Через неделю",
|
"prefs_notifications_delete_after_one_week": "Через неделю",
|
||||||
"prefs_notifications_delete_after_one_month": "Через месяц",
|
"prefs_notifications_delete_after_one_month": "Через месяц",
|
||||||
"prefs_notifications_delete_after_never_description": "Уведомления никогда не удаляются автоматически",
|
"prefs_notifications_delete_after_never_description": "Уведомления никогда не удаляются автоматически",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Уведомления автоматически удаляются через три часа",
|
"prefs_notifications_delete_after_three_hours_description": "Уведомления автоматически удаляются через три часа",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Уведомления автоматически удаляются через один день",
|
"prefs_notifications_delete_after_one_day_description": "Уведомления автоматически удаляются через один день",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Уведомления автоматически удаляются через неделю",
|
"prefs_notifications_delete_after_one_week_description": "Уведомления автоматически удаляются через неделю",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Уведомления автоматически удаляются через месяц",
|
"prefs_notifications_delete_after_one_month_description": "Уведомления автоматически удаляются через месяц",
|
||||||
"prefs_users_title": "Управление пользователями",
|
"prefs_users_title": "Управление пользователями",
|
||||||
"prefs_users_add_button": "Добавить пользователя",
|
"prefs_users_add_button": "Добавить пользователя",
|
||||||
"prefs_users_table_user_header": "Пользователь",
|
"prefs_users_table_user_header": "Пользователь",
|
||||||
"prefs_users_table_base_url_header": "URL службы",
|
"prefs_users_table_base_url_header": "URL службы",
|
||||||
"prefs_users_dialog_title_add": "Добавить пользователя",
|
"prefs_users_dialog_title_add": "Добавить пользователя",
|
||||||
"prefs_users_dialog_title_edit": "Редактировать пользователя",
|
"prefs_users_dialog_title_edit": "Редактировать пользователя",
|
||||||
"prefs_users_dialog_base_url_label": "URL-адрес службы. Например, https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL-адрес службы. Например, https://ntfy.sh",
|
||||||
"prefs_users_dialog_username_label": "Имя пользователя. Например, phil",
|
"prefs_users_dialog_username_label": "Имя пользователя. Например, phil",
|
||||||
"prefs_users_dialog_password_label": "Пароль",
|
"prefs_users_dialog_password_label": "Пароль",
|
||||||
"prefs_users_dialog_button_cancel": "Отмена",
|
"prefs_users_dialog_button_cancel": "Отмена",
|
||||||
"prefs_users_dialog_button_add": "Добавить",
|
"prefs_users_dialog_button_add": "Добавить",
|
||||||
"prefs_users_dialog_button_save": "Сохранить",
|
"prefs_users_dialog_button_save": "Сохранить",
|
||||||
"prefs_appearance_title": "Внешний вид",
|
"prefs_appearance_title": "Внешний вид",
|
||||||
"prefs_appearance_language_title": "Язык",
|
"prefs_appearance_language_title": "Язык",
|
||||||
"priority_min": "минимум",
|
"priority_min": "минимум",
|
||||||
"priority_low": "низкий",
|
"priority_low": "низкий",
|
||||||
"priority_default": "по умолчанию",
|
"priority_default": "по умолчанию",
|
||||||
"priority_high": "высокий",
|
"priority_high": "высокий",
|
||||||
"priority_max": "максимальный",
|
"priority_max": "максимальный",
|
||||||
"error_boundary_title": "О нет, Ntfy сломался",
|
"error_boundary_title": "О нет, Ntfy сломался",
|
||||||
"error_boundary_button_copy_stack_trace": "Копирование трассировки стека",
|
"error_boundary_button_copy_stack_trace": "Копирование трассировки стека",
|
||||||
"error_boundary_stack_trace": "Трассировка стека",
|
"error_boundary_stack_trace": "Трассировка стека",
|
||||||
"error_boundary_gathering_info": "Соберите больше информации …",
|
"error_boundary_gathering_info": "Соберите больше информации …",
|
||||||
"publish_dialog_drop_file_here": "Перетащите файл юда",
|
"publish_dialog_drop_file_here": "Перетащите файл юда",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Высокий приоритет и выше",
|
"prefs_notifications_min_priority_high_and_higher": "Высокий приоритет и выше",
|
||||||
"action_bar_toggle_action_menu": "Открыть/закрыть меню",
|
"action_bar_toggle_action_menu": "Открыть/закрыть меню",
|
||||||
"action_bar_show_menu": "Показать меню",
|
"action_bar_show_menu": "Показать меню",
|
||||||
"action_bar_logo_alt": "ntfy лого",
|
"action_bar_logo_alt": "ntfy лого",
|
||||||
"emoji_picker_search_clear": "Очистить поиск"
|
"emoji_picker_search_clear": "Очистить поиск"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,51 +1,51 @@
|
||||||
{
|
{
|
||||||
"action_bar_settings": "Inställningar",
|
"action_bar_settings": "Inställningar",
|
||||||
"action_bar_send_test_notification": "Skicka test notis",
|
"action_bar_send_test_notification": "Skicka test notis",
|
||||||
"action_bar_toggle_action_menu": "Öppna/stäng åtgärdsmeny",
|
"action_bar_toggle_action_menu": "Öppna/stäng åtgärdsmeny",
|
||||||
"message_bar_type_message": "Skriv ett meddelande här",
|
"message_bar_type_message": "Skriv ett meddelande här",
|
||||||
"message_bar_error_publishing": "Fel vid publicering av notis",
|
"message_bar_error_publishing": "Fel vid publicering av notis",
|
||||||
"message_bar_show_dialog": "Visa publicerings dialog",
|
"message_bar_show_dialog": "Visa publicerings dialog",
|
||||||
"message_bar_publish": "Publicera meddelande",
|
"message_bar_publish": "Publicera meddelande",
|
||||||
"nav_topics_title": "Prenumererade kategorier",
|
"nav_topics_title": "Prenumererade kategorier",
|
||||||
"nav_button_all_notifications": "Alla notiser",
|
"nav_button_all_notifications": "Alla notiser",
|
||||||
"nav_button_documentation": "Dokumentation",
|
"nav_button_documentation": "Dokumentation",
|
||||||
"nav_button_publish_message": "Publicera notis",
|
"nav_button_publish_message": "Publicera notis",
|
||||||
"nav_button_subscribe": "Prenumerera på kategori",
|
"nav_button_subscribe": "Prenumerera på kategori",
|
||||||
"alert_grant_title": "Notiser är avstängda",
|
"alert_grant_title": "Notiser är avstängda",
|
||||||
"alert_grant_button": "Bevilja nu",
|
"alert_grant_button": "Bevilja nu",
|
||||||
"alert_not_supported_title": "Notiser stöds inte",
|
"alert_not_supported_title": "Notiser stöds inte",
|
||||||
"notifications_list": "Notis-lista",
|
"notifications_list": "Notis-lista",
|
||||||
"notifications_list_item": "Notis",
|
"notifications_list_item": "Notis",
|
||||||
"notifications_delete": "Radera",
|
"notifications_delete": "Radera",
|
||||||
"notifications_copied_to_clipboard": "Kopierat till urklipp",
|
"notifications_copied_to_clipboard": "Kopierat till urklipp",
|
||||||
"notifications_tags": "Taggar",
|
"notifications_tags": "Taggar",
|
||||||
"notifications_new_indicator": "Ny notis",
|
"notifications_new_indicator": "Ny notis",
|
||||||
"notifications_attachment_copy_url_title": "Kopiera bifogad URL till urklipp",
|
"notifications_attachment_copy_url_title": "Kopiera bifogad URL till urklipp",
|
||||||
"notifications_attachment_copy_url_button": "Kopiera URL",
|
"notifications_attachment_copy_url_button": "Kopiera URL",
|
||||||
"notifications_attachment_open_title": "Gå till {{url}}",
|
"notifications_attachment_open_title": "Gå till {{url}}",
|
||||||
"notifications_attachment_open_button": "Öppna bilagan",
|
"notifications_attachment_open_button": "Öppna bilagan",
|
||||||
"notifications_attachment_link_expired": "Nedladdningslänk utgått",
|
"notifications_attachment_link_expired": "Nedladdningslänk utgått",
|
||||||
"notifications_priority_x": "Prioritet {{priority}}",
|
"notifications_priority_x": "Prioritet {{priority}}",
|
||||||
"action_bar_show_menu": "Visa meny",
|
"action_bar_show_menu": "Visa meny",
|
||||||
"action_bar_logo_alt": "ntfy logga",
|
"action_bar_logo_alt": "ntfy logga",
|
||||||
"action_bar_unsubscribe": "Avprenumerera",
|
"action_bar_unsubscribe": "Avprenumerera",
|
||||||
"action_bar_toggle_mute": "Tysta/aktivera notiser",
|
"action_bar_toggle_mute": "Tysta/aktivera notiser",
|
||||||
"action_bar_clear_notifications": "Rensa alla notiser",
|
"action_bar_clear_notifications": "Rensa alla notiser",
|
||||||
"nav_button_connecting": "ansluter",
|
"nav_button_connecting": "ansluter",
|
||||||
"notifications_attachment_image": "Bifogad bild",
|
"notifications_attachment_image": "Bifogad bild",
|
||||||
"nav_button_settings": "Inställningar",
|
"nav_button_settings": "Inställningar",
|
||||||
"nav_button_muted": "Notiser tystade",
|
"nav_button_muted": "Notiser tystade",
|
||||||
"notifications_attachment_link_expires": "länken utgår {{date}}",
|
"notifications_attachment_link_expires": "länken utgår {{date}}",
|
||||||
"notifications_attachment_file_image": "bild fil",
|
"notifications_attachment_file_image": "bild fil",
|
||||||
"notifications_attachment_file_audio": "ljud fil",
|
"notifications_attachment_file_audio": "ljud fil",
|
||||||
"alert_grant_description": "Ge din webbläsare behörighet att visa skrivbordsnotiser.",
|
"alert_grant_description": "Ge din webbläsare behörighet att visa skrivbordsnotiser.",
|
||||||
"alert_not_supported_description": "Notiser stöds inte i din webbläsare.",
|
"alert_not_supported_description": "Notiser stöds inte i din webbläsare.",
|
||||||
"notifications_mark_read": "Markera som läst",
|
"notifications_mark_read": "Markera som läst",
|
||||||
"notifications_attachment_file_video": "video fil",
|
"notifications_attachment_file_video": "video fil",
|
||||||
"notifications_click_copy_url_button": "Kopiera länk",
|
"notifications_click_copy_url_button": "Kopiera länk",
|
||||||
"notifications_click_open_button": "Öppna länk",
|
"notifications_click_open_button": "Öppna länk",
|
||||||
"notifications_actions_open_url_title": "Gå till {{url}}",
|
"notifications_actions_open_url_title": "Gå till {{url}}",
|
||||||
"notifications_none_for_any_title": "Du har inte fått några notiser.",
|
"notifications_none_for_any_title": "Du har inte fått några notiser.",
|
||||||
"notifications_example": "Exempel",
|
"notifications_example": "Exempel",
|
||||||
"notifications_loading": "Laddar notiser …"
|
"notifications_loading": "Laddar notiser …"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"nav_button_subscribe": "Konuya abone ol",
|
"nav_button_subscribe": "Konuya abone ol",
|
||||||
"nav_button_settings": "Ayarlar",
|
"nav_button_settings": "Ayarlar",
|
||||||
"action_bar_send_test_notification": "Test bildirimi gönder",
|
"action_bar_send_test_notification": "Test bildirimi gönder",
|
||||||
"message_bar_type_message": "Buraya bir mesaj yazın",
|
"message_bar_type_message": "Buraya bir mesaj yazın",
|
||||||
"action_bar_clear_notifications": "Tüm bildirimleri temizle",
|
"action_bar_clear_notifications": "Tüm bildirimleri temizle",
|
||||||
"action_bar_unsubscribe": "Abonelikten çık",
|
"action_bar_unsubscribe": "Abonelikten çık",
|
||||||
"action_bar_settings": "Ayarlar",
|
"action_bar_settings": "Ayarlar",
|
||||||
"message_bar_error_publishing": "Bildirim yayınlanırken hata oluştu",
|
"message_bar_error_publishing": "Bildirim yayınlanırken hata oluştu",
|
||||||
"nav_topics_title": "Abone olunan konular",
|
"nav_topics_title": "Abone olunan konular",
|
||||||
"nav_button_all_notifications": "Tüm bildirimler",
|
"nav_button_all_notifications": "Tüm bildirimler",
|
||||||
"publish_dialog_tags_placeholder": "Virgülle ayrılmış etiket listesi, örn. uyarı, srv1-yedekleme",
|
"publish_dialog_tags_placeholder": "Virgülle ayrılmış etiket listesi, örn. uyarı, srv1-yedekleme",
|
||||||
"publish_dialog_priority_label": "Öncelik",
|
"publish_dialog_priority_label": "Öncelik",
|
||||||
"publish_dialog_click_label": "Tıklama URL'si",
|
"publish_dialog_click_label": "Tıklama URL'si",
|
||||||
"publish_dialog_click_placeholder": "Bildirim tıklandığında açılan URL",
|
"publish_dialog_click_placeholder": "Bildirim tıklandığında açılan URL",
|
||||||
"publish_dialog_email_label": "E-posta adresi",
|
"publish_dialog_email_label": "E-posta adresi",
|
||||||
"publish_dialog_email_placeholder": "Bildirimin iletileceği adres, örn. phil@example.com",
|
"publish_dialog_email_placeholder": "Bildirimin iletileceği adres, örn. phil@example.com",
|
||||||
"publish_dialog_attach_label": "Ek URL'si",
|
"publish_dialog_attach_label": "Ek URL'si",
|
||||||
"publish_dialog_filename_label": "Dosya adı",
|
"publish_dialog_filename_label": "Dosya adı",
|
||||||
"publish_dialog_filename_placeholder": "Ek dosya adı",
|
"publish_dialog_filename_placeholder": "Ek dosya adı",
|
||||||
"publish_dialog_delay_label": "Gecikme",
|
"publish_dialog_delay_label": "Gecikme",
|
||||||
"publish_dialog_button_cancel": "İptal",
|
"publish_dialog_button_cancel": "İptal",
|
||||||
"publish_dialog_button_send": "Gönder",
|
"publish_dialog_button_send": "Gönder",
|
||||||
"publish_dialog_checkbox_publish_another": "Başka bir tane yayınla",
|
"publish_dialog_checkbox_publish_another": "Başka bir tane yayınla",
|
||||||
"publish_dialog_attached_file_title": "Ekli dosya:",
|
"publish_dialog_attached_file_title": "Ekli dosya:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Ek dosya adı",
|
"publish_dialog_attached_file_filename_placeholder": "Ek dosya adı",
|
||||||
"subscribe_dialog_subscribe_title": "Konuya abone ol",
|
"subscribe_dialog_subscribe_title": "Konuya abone ol",
|
||||||
"subscribe_dialog_subscribe_description": "Konular parola korumalı olmayabilir, bu nedenle tahmin edilmesi kolay olmayan bir ad seçin. Abone olduktan sonra PUT/POST bildirimleri yapabilirsiniz.",
|
"subscribe_dialog_subscribe_description": "Konular parola korumalı olmayabilir, bu nedenle tahmin edilmesi kolay olmayan bir ad seçin. Abone olduktan sonra PUT/POST bildirimleri yapabilirsiniz.",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Konu adı, örn. benim_uyarilarim",
|
"subscribe_dialog_subscribe_topic_placeholder": "Konu adı, örn. benim_uyarilarim",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Başka bir sunucu kullan",
|
"subscribe_dialog_subscribe_use_another_label": "Başka bir sunucu kullan",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "İptal",
|
"subscribe_dialog_subscribe_button_cancel": "İptal",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Abone ol",
|
"subscribe_dialog_subscribe_button_subscribe": "Abone ol",
|
||||||
"subscribe_dialog_login_title": "Oturum açma gerekli",
|
"subscribe_dialog_login_title": "Oturum açma gerekli",
|
||||||
"subscribe_dialog_login_description": "Bu konu parola korumalı. Abone olmak için lütfen kullanıcı adı ve parola girin.",
|
"subscribe_dialog_login_description": "Bu konu parola korumalı. Abone olmak için lütfen kullanıcı adı ve parola girin.",
|
||||||
"subscribe_dialog_login_username_label": "Kullanıcı adı, örn. phil",
|
"subscribe_dialog_login_username_label": "Kullanıcı adı, örn. phil",
|
||||||
"subscribe_dialog_login_password_label": "Parola",
|
"subscribe_dialog_login_password_label": "Parola",
|
||||||
"subscribe_dialog_login_button_back": "Geri",
|
"subscribe_dialog_login_button_back": "Geri",
|
||||||
"subscribe_dialog_login_button_login": "Oturum aç",
|
"subscribe_dialog_login_button_login": "Oturum aç",
|
||||||
"subscribe_dialog_error_user_not_authorized": "{{username}} kullanıcısı yetkili değil",
|
"subscribe_dialog_error_user_not_authorized": "{{username}} kullanıcısı yetkili değil",
|
||||||
"subscribe_dialog_error_user_anonymous": "anonim",
|
"subscribe_dialog_error_user_anonymous": "anonim",
|
||||||
"prefs_notifications_title": "Bildirimler",
|
"prefs_notifications_title": "Bildirimler",
|
||||||
"prefs_notifications_sound_title": "Bildirim sesi",
|
"prefs_notifications_sound_title": "Bildirim sesi",
|
||||||
"prefs_notifications_sound_no_sound": "Ses yok",
|
"prefs_notifications_sound_no_sound": "Ses yok",
|
||||||
"prefs_notifications_min_priority_title": "En düşük öncelik",
|
"prefs_notifications_min_priority_title": "En düşük öncelik",
|
||||||
"prefs_notifications_min_priority_any": "Herhangi bir öncelik",
|
"prefs_notifications_min_priority_any": "Herhangi bir öncelik",
|
||||||
"publish_dialog_topic_placeholder": "Konu adı, örn. benim_uyarilarim",
|
"publish_dialog_topic_placeholder": "Konu adı, örn. benim_uyarilarim",
|
||||||
"alert_grant_button": "Şimdi ver",
|
"alert_grant_button": "Şimdi ver",
|
||||||
"alert_not_supported_title": "Bildirimler desteklenmiyor",
|
"alert_not_supported_title": "Bildirimler desteklenmiyor",
|
||||||
"notifications_attachment_link_expires": "bağlantının süresi {{date}} tarihinde doluyor",
|
"notifications_attachment_link_expires": "bağlantının süresi {{date}} tarihinde doluyor",
|
||||||
"notifications_click_copy_url_title": "Bağlantı URL'sini panoya kopyala",
|
"notifications_click_copy_url_title": "Bağlantı URL'sini panoya kopyala",
|
||||||
"notifications_loading": "Bildirimler yükleniyor…",
|
"notifications_loading": "Bildirimler yükleniyor…",
|
||||||
"publish_dialog_progress_uploading": "Karşıya yükleniyor…",
|
"publish_dialog_progress_uploading": "Karşıya yükleniyor…",
|
||||||
"publish_dialog_attachment_limits_file_reached": "{{fileSizeLimit}} dosya sınırını aşıyor",
|
"publish_dialog_attachment_limits_file_reached": "{{fileSizeLimit}} dosya sınırını aşıyor",
|
||||||
"publish_dialog_priority_default": "Öntanımlı öncelik",
|
"publish_dialog_priority_default": "Öntanımlı öncelik",
|
||||||
"publish_dialog_chip_click_label": "Tıklama URL'si",
|
"publish_dialog_chip_click_label": "Tıklama URL'si",
|
||||||
"publish_dialog_attach_placeholder": "URL ile dosya ekle, örn. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "URL ile dosya ekle, örn. https://f-droid.org/F-Droid.apk",
|
||||||
"prefs_notifications_delete_after_never": "Hiçbir zaman",
|
"prefs_notifications_delete_after_never": "Hiçbir zaman",
|
||||||
"notifications_attachment_copy_url_button": "URL'yi kopyala",
|
"notifications_attachment_copy_url_button": "URL'yi kopyala",
|
||||||
"notifications_attachment_open_button": "Eki aç",
|
"notifications_attachment_open_button": "Eki aç",
|
||||||
"nav_button_documentation": "Belgelendirme",
|
"nav_button_documentation": "Belgelendirme",
|
||||||
"nav_button_publish_message": "Bildirim yayınla",
|
"nav_button_publish_message": "Bildirim yayınla",
|
||||||
"alert_grant_title": "Bildirimler devre dışı",
|
"alert_grant_title": "Bildirimler devre dışı",
|
||||||
"alert_grant_description": "Tarayıcınıza masaüstü bildirimlerini görüntüleme izni verin.",
|
"alert_grant_description": "Tarayıcınıza masaüstü bildirimlerini görüntüleme izni verin.",
|
||||||
"alert_not_supported_description": "Tarayıcınızda bildirimler desteklenmiyor.",
|
"alert_not_supported_description": "Tarayıcınızda bildirimler desteklenmiyor.",
|
||||||
"notifications_copied_to_clipboard": "Panoya kopyalandı",
|
"notifications_copied_to_clipboard": "Panoya kopyalandı",
|
||||||
"notifications_tags": "Etiketler",
|
"notifications_tags": "Etiketler",
|
||||||
"notifications_attachment_copy_url_title": "Ek URL'sini panoya kopyala",
|
"notifications_attachment_copy_url_title": "Ek URL'sini panoya kopyala",
|
||||||
"notifications_attachment_open_title": "{{url}} adresine git",
|
"notifications_attachment_open_title": "{{url}} adresine git",
|
||||||
"notifications_none_for_topic_title": "Bu konu için henüz herhangi bir bildirim almadınız.",
|
"notifications_none_for_topic_title": "Bu konu için henüz herhangi bir bildirim almadınız.",
|
||||||
"notifications_none_for_topic_description": "Bu konuya bildirim göndermek için konu URL'sine PUT veya POST göndermeniz yeterlidir.",
|
"notifications_none_for_topic_description": "Bu konuya bildirim göndermek için konu URL'sine PUT veya POST göndermeniz yeterlidir.",
|
||||||
"notifications_none_for_any_title": "Herhangi bir bildirim almadınız.",
|
"notifications_none_for_any_title": "Herhangi bir bildirim almadınız.",
|
||||||
"notifications_attachment_link_expired": "indirme bağlantısının süresi doldu",
|
"notifications_attachment_link_expired": "indirme bağlantısının süresi doldu",
|
||||||
"notifications_click_copy_url_button": "Bağlantıyı kopyala",
|
"notifications_click_copy_url_button": "Bağlantıyı kopyala",
|
||||||
"notifications_actions_open_url_title": "{{url}} adresine git",
|
"notifications_actions_open_url_title": "{{url}} adresine git",
|
||||||
"notifications_click_open_button": "Bağlantıyı aç",
|
"notifications_click_open_button": "Bağlantıyı aç",
|
||||||
"notifications_no_subscriptions_description": "Bir konu oluşturmak veya bir konuya abone olmak için \"{{linktext}}\" bağlantısına tıklayın. Bundan sonra PUT veya POST yoluyla mesaj gönderebilirsiniz ve buradan bildirimler alırsınız.",
|
"notifications_no_subscriptions_description": "Bir konu oluşturmak veya bir konuya abone olmak için \"{{linktext}}\" bağlantısına tıklayın. Bundan sonra PUT veya POST yoluyla mesaj gönderebilirsiniz ve buradan bildirimler alırsınız.",
|
||||||
"notifications_example": "Örnek",
|
"notifications_example": "Örnek",
|
||||||
"notifications_more_details": "Daha fazla bilgi için <websiteLink>web sitesine</websiteLink> veya <docsLink>belgelendirmeye</docsLink> bakın.",
|
"notifications_more_details": "Daha fazla bilgi için <websiteLink>web sitesine</websiteLink> veya <docsLink>belgelendirmeye</docsLink> bakın.",
|
||||||
"publish_dialog_chip_attach_url_label": "URL ile dosya ekle",
|
"publish_dialog_chip_attach_url_label": "URL ile dosya ekle",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Öntanımlı öncelik ve üstü",
|
"prefs_notifications_min_priority_default_and_higher": "Öntanımlı öncelik ve üstü",
|
||||||
"prefs_notifications_delete_after_three_hours": "Üç saat sonra",
|
"prefs_notifications_delete_after_three_hours": "Üç saat sonra",
|
||||||
"notifications_none_for_any_description": "Bir konuya bildirim göndermek için konu URL'sine PUT veya POST göndermeniz yeterlidir. İşte konularınızdan birini kullanan bir örnek.",
|
"notifications_none_for_any_description": "Bir konuya bildirim göndermek için konu URL'sine PUT veya POST göndermeniz yeterlidir. İşte konularınızdan birini kullanan bir örnek.",
|
||||||
"notifications_no_subscriptions_title": "Henüz aboneliğiniz yok gibi görünüyor.",
|
"notifications_no_subscriptions_title": "Henüz aboneliğiniz yok gibi görünüyor.",
|
||||||
"publish_dialog_title_topic": "{{topic}} konusuna yayınla",
|
"publish_dialog_title_topic": "{{topic}} konusuna yayınla",
|
||||||
"publish_dialog_title_no_topic": "Bildirim yayınla",
|
"publish_dialog_title_no_topic": "Bildirim yayınla",
|
||||||
"publish_dialog_progress_uploading_detail": "Karşıya yükleniyor: {{loaded}}/{{total}} ({{percent}}%)…",
|
"publish_dialog_progress_uploading_detail": "Karşıya yükleniyor: {{loaded}}/{{total}} ({{percent}}%)…",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "{{fileSizeLimit}} dosya sınırını ve kotasını aşıyor, kalan {{remainingBytes}}",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "{{fileSizeLimit}} dosya sınırını ve kotasını aşıyor, kalan {{remainingBytes}}",
|
||||||
"publish_dialog_priority_min": "En düşük öncelik",
|
"publish_dialog_priority_min": "En düşük öncelik",
|
||||||
"publish_dialog_priority_low": "Düşük öncelik",
|
"publish_dialog_priority_low": "Düşük öncelik",
|
||||||
"publish_dialog_base_url_label": "Hizmet URL'si",
|
"publish_dialog_base_url_label": "Hizmet URL'si",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "kotayı aşıyor, kalan {{remainingBytes}}",
|
"publish_dialog_attachment_limits_quota_reached": "kotayı aşıyor, kalan {{remainingBytes}}",
|
||||||
"publish_dialog_message_published": "Bildirim yayınlandı",
|
"publish_dialog_message_published": "Bildirim yayınlandı",
|
||||||
"publish_dialog_title_label": "Başlık",
|
"publish_dialog_title_label": "Başlık",
|
||||||
"publish_dialog_priority_high": "Yüksek öncelik",
|
"publish_dialog_priority_high": "Yüksek öncelik",
|
||||||
"publish_dialog_priority_max": "En yüksek öncelik",
|
"publish_dialog_priority_max": "En yüksek öncelik",
|
||||||
"publish_dialog_message_label": "Mesaj",
|
"publish_dialog_message_label": "Mesaj",
|
||||||
"publish_dialog_other_features": "Diğer özellikler:",
|
"publish_dialog_other_features": "Diğer özellikler:",
|
||||||
"publish_dialog_chip_email_label": "E-posta adresine ilet",
|
"publish_dialog_chip_email_label": "E-posta adresine ilet",
|
||||||
"publish_dialog_topic_label": "Konu adı",
|
"publish_dialog_topic_label": "Konu adı",
|
||||||
"publish_dialog_base_url_placeholder": "Hizmet URL'si, örn. https://example.com",
|
"publish_dialog_base_url_placeholder": "Hizmet URL'si, örn. https://example.com",
|
||||||
"publish_dialog_title_placeholder": "Bildirim başlığı, örn. Disk alanı uyarısı",
|
"publish_dialog_title_placeholder": "Bildirim başlığı, örn. Disk alanı uyarısı",
|
||||||
"publish_dialog_message_placeholder": "Buraya bir mesaj yazın",
|
"publish_dialog_message_placeholder": "Buraya bir mesaj yazın",
|
||||||
"publish_dialog_tags_label": "Etiketler",
|
"publish_dialog_tags_label": "Etiketler",
|
||||||
"publish_dialog_delay_placeholder": "Teslimat gecikmesi, örn. {{unixTimestamp}}, {{relativeTime}} veya \"{{naturalLanguage}}\"",
|
"publish_dialog_delay_placeholder": "Teslimat gecikmesi, örn. {{unixTimestamp}}, {{relativeTime}} veya \"{{naturalLanguage}}\"",
|
||||||
"publish_dialog_chip_attach_file_label": "Yerel dosya ekle",
|
"publish_dialog_chip_attach_file_label": "Yerel dosya ekle",
|
||||||
"publish_dialog_chip_delay_label": "Teslimat gecikmesi",
|
"publish_dialog_chip_delay_label": "Teslimat gecikmesi",
|
||||||
"publish_dialog_chip_topic_label": "Konuyu değiştir",
|
"publish_dialog_chip_topic_label": "Konuyu değiştir",
|
||||||
"publish_dialog_button_cancel_sending": "Göndermeyi iptal et",
|
"publish_dialog_button_cancel_sending": "Göndermeyi iptal et",
|
||||||
"prefs_notifications_delete_after_one_week": "Bir hafta sonra",
|
"prefs_notifications_delete_after_one_week": "Bir hafta sonra",
|
||||||
"prefs_notifications_delete_after_one_month": "Bir ay sonra",
|
"prefs_notifications_delete_after_one_month": "Bir ay sonra",
|
||||||
"publish_dialog_details_examples_description": "Örnekler ve tüm gönderme özelliklerinin ayrıntılı açıklaması için lütfen <docsLink>belgelendirmeye</docsLink> bakın.",
|
"publish_dialog_details_examples_description": "Örnekler ve tüm gönderme özelliklerinin ayrıntılı açıklaması için lütfen <docsLink>belgelendirmeye</docsLink> bakın.",
|
||||||
"emoji_picker_search_placeholder": "Emoji ara",
|
"emoji_picker_search_placeholder": "Emoji ara",
|
||||||
"prefs_notifications_delete_after_title": "Bildirimleri sil",
|
"prefs_notifications_delete_after_title": "Bildirimleri sil",
|
||||||
"prefs_notifications_delete_after_one_day": "Bir gün sonra",
|
"prefs_notifications_delete_after_one_day": "Bir gün sonra",
|
||||||
"publish_dialog_drop_file_here": "Dosyayı buraya bırakın",
|
"publish_dialog_drop_file_here": "Dosyayı buraya bırakın",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Düşük öncelik ve üstü",
|
"prefs_notifications_min_priority_low_and_higher": "Düşük öncelik ve üstü",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Yüksek öncelik ve üstü",
|
"prefs_notifications_min_priority_high_and_higher": "Yüksek öncelik ve üstü",
|
||||||
"prefs_notifications_min_priority_max_only": "Yalnızca en yüksek öncelik",
|
"prefs_notifications_min_priority_max_only": "Yalnızca en yüksek öncelik",
|
||||||
"prefs_users_title": "Kullanıcıları yönet",
|
"prefs_users_title": "Kullanıcıları yönet",
|
||||||
"prefs_users_dialog_title_edit": "Kullanıcıyı düzenle",
|
"prefs_users_dialog_title_edit": "Kullanıcıyı düzenle",
|
||||||
"prefs_users_dialog_base_url_label": "Hizmet URL'si, örn. https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "Hizmet URL'si, örn. https://ntfy.sh",
|
||||||
"prefs_users_description": "Burada korunan konularınız için kullanıcı ekleyin/kaldırın. Lütfen kullanıcı adı ve parolanın tarayıcının yerel deposunda saklandığını unutmayın.",
|
"prefs_users_description": "Burada korunan konularınız için kullanıcı ekleyin/kaldırın. Lütfen kullanıcı adı ve parolanın tarayıcının yerel deposunda saklandığını unutmayın.",
|
||||||
"prefs_users_add_button": "Kullanıcı ekle",
|
"prefs_users_add_button": "Kullanıcı ekle",
|
||||||
"prefs_users_table_base_url_header": "Hizmet URL'si",
|
"prefs_users_table_base_url_header": "Hizmet URL'si",
|
||||||
"prefs_users_dialog_title_add": "Kullanıcı ekle",
|
"prefs_users_dialog_title_add": "Kullanıcı ekle",
|
||||||
"prefs_users_dialog_username_label": "Kullanıcı adı, örn. phil",
|
"prefs_users_dialog_username_label": "Kullanıcı adı, örn. phil",
|
||||||
"prefs_users_table_user_header": "Kullanıcı",
|
"prefs_users_table_user_header": "Kullanıcı",
|
||||||
"prefs_users_dialog_password_label": "Parola",
|
"prefs_users_dialog_password_label": "Parola",
|
||||||
"prefs_users_dialog_button_add": "Ekle",
|
"prefs_users_dialog_button_add": "Ekle",
|
||||||
"prefs_users_dialog_button_cancel": "İptal",
|
"prefs_users_dialog_button_cancel": "İptal",
|
||||||
"prefs_users_dialog_button_save": "Kaydet",
|
"prefs_users_dialog_button_save": "Kaydet",
|
||||||
"prefs_appearance_title": "Görünüm",
|
"prefs_appearance_title": "Görünüm",
|
||||||
"prefs_appearance_language_title": "Dil",
|
"prefs_appearance_language_title": "Dil",
|
||||||
"error_boundary_title": "Olamaz, ntfy çöktü",
|
"error_boundary_title": "Olamaz, ntfy çöktü",
|
||||||
"error_boundary_gathering_info": "Daha fazla bilgi topla…",
|
"error_boundary_gathering_info": "Daha fazla bilgi topla…",
|
||||||
"error_boundary_description": "Bunun olmaması gerekiyordu. Çok üzgünüm.<br/>Bir dakikanız varsa, lütfen <githubLink>bunu GitHub üzerinden bildirin</githubLink> ya da <discordLink>Discord</discordLink> veya <matrixLink>Matrix</matrixLink> aracılığıyla bize iletin.",
|
"error_boundary_description": "Bunun olmaması gerekiyordu. Çok üzgünüm.<br/>Bir dakikanız varsa, lütfen <githubLink>bunu GitHub üzerinden bildirin</githubLink> ya da <discordLink>Discord</discordLink> veya <matrixLink>Matrix</matrixLink> aracılığıyla bize iletin.",
|
||||||
"error_boundary_button_copy_stack_trace": "Yığın izlemeyi kopyala",
|
"error_boundary_button_copy_stack_trace": "Yığın izlemeyi kopyala",
|
||||||
"error_boundary_stack_trace": "Yığın izleme",
|
"error_boundary_stack_trace": "Yığın izleme",
|
||||||
"prefs_notifications_sound_description_none": "Bildirimler geldiğinde herhangi bir ses çalmaz",
|
"prefs_notifications_sound_description_none": "Bildirimler geldiğinde herhangi bir ses çalmaz",
|
||||||
"prefs_notifications_sound_description_some": "Bildirimler geldiğinde {{sound}} sesini çalar",
|
"prefs_notifications_sound_description_some": "Bildirimler geldiğinde {{sound}} sesini çalar",
|
||||||
"prefs_notifications_min_priority_description_any": "Öncelikten bağımsız olarak tüm bildirimleri göster",
|
"prefs_notifications_min_priority_description_any": "Öncelikten bağımsız olarak tüm bildirimleri göster",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Öncelik {{number}} ({{name}}) veya üstüyse bildirimleri göster",
|
"prefs_notifications_min_priority_description_x_or_higher": "Öncelik {{number}} ({{name}}) veya üstüyse bildirimleri göster",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Bildirimler bir ay sonra otomatik olarak silinir",
|
"prefs_notifications_delete_after_one_month_description": "Bildirimler bir ay sonra otomatik olarak silinir",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Bildirimler üç saat sonra otomatik olarak silinir",
|
"prefs_notifications_delete_after_three_hours_description": "Bildirimler üç saat sonra otomatik olarak silinir",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Bildirimler bir hafta sonra otomatik olarak silinir",
|
"prefs_notifications_delete_after_one_week_description": "Bildirimler bir hafta sonra otomatik olarak silinir",
|
||||||
"priority_min": "en düşük",
|
"priority_min": "en düşük",
|
||||||
"priority_low": "düşük",
|
"priority_low": "düşük",
|
||||||
"priority_max": "en yüksek",
|
"priority_max": "en yüksek",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Bildirimler bir gün sonra otomatik olarak silinir",
|
"prefs_notifications_delete_after_one_day_description": "Bildirimler bir gün sonra otomatik olarak silinir",
|
||||||
"priority_default": "öntanımlı",
|
"priority_default": "öntanımlı",
|
||||||
"prefs_notifications_min_priority_description_max": "Öncelik 5 (en fazla) ise bildirimleri göster",
|
"prefs_notifications_min_priority_description_max": "Öncelik 5 (en fazla) ise bildirimleri göster",
|
||||||
"prefs_notifications_delete_after_never_description": "Bildirimler asla otomatik olarak silinmez",
|
"prefs_notifications_delete_after_never_description": "Bildirimler asla otomatik olarak silinmez",
|
||||||
"priority_high": "yüksek",
|
"priority_high": "yüksek",
|
||||||
"notifications_actions_not_supported": "Eylem, web uygulamasında desteklenmiyor",
|
"notifications_actions_not_supported": "Eylem, web uygulamasında desteklenmiyor",
|
||||||
"notifications_actions_http_request_title": "{{url}} adresine HTTP {{method}} gönder",
|
"notifications_actions_http_request_title": "{{url}} adresine HTTP {{method}} gönder",
|
||||||
"action_bar_show_menu": "Menüyü göster",
|
"action_bar_show_menu": "Menüyü göster",
|
||||||
"action_bar_logo_alt": "ntfy logosu",
|
"action_bar_logo_alt": "ntfy logosu",
|
||||||
"action_bar_toggle_action_menu": "Eylem menüsünü aç/kapat",
|
"action_bar_toggle_action_menu": "Eylem menüsünü aç/kapat",
|
||||||
"message_bar_show_dialog": "Yayınla iletişim kutusunu göster",
|
"message_bar_show_dialog": "Yayınla iletişim kutusunu göster",
|
||||||
"message_bar_publish": "Mesaj yayınla",
|
"message_bar_publish": "Mesaj yayınla",
|
||||||
"nav_button_connecting": "bağlanıyor",
|
"nav_button_connecting": "bağlanıyor",
|
||||||
"notifications_list": "Bildirimler listesi",
|
"notifications_list": "Bildirimler listesi",
|
||||||
"notifications_list_item": "Bildirim",
|
"notifications_list_item": "Bildirim",
|
||||||
"notifications_delete": "Sil",
|
"notifications_delete": "Sil",
|
||||||
"notifications_attachment_image": "Ek resmi",
|
"notifications_attachment_image": "Ek resmi",
|
||||||
"notifications_attachment_file_image": "resim dosyası",
|
"notifications_attachment_file_image": "resim dosyası",
|
||||||
"notifications_attachment_file_video": "video dosyası",
|
"notifications_attachment_file_video": "video dosyası",
|
||||||
"notifications_attachment_file_audio": "ses dosyası",
|
"notifications_attachment_file_audio": "ses dosyası",
|
||||||
"notifications_attachment_file_app": "Android uygulama dosyası",
|
"notifications_attachment_file_app": "Android uygulama dosyası",
|
||||||
"notifications_attachment_file_document": "diğer belge",
|
"notifications_attachment_file_document": "diğer belge",
|
||||||
"publish_dialog_emoji_picker_show": "Emoji seç",
|
"publish_dialog_emoji_picker_show": "Emoji seç",
|
||||||
"publish_dialog_topic_reset": "Konuyu sıfırla",
|
"publish_dialog_topic_reset": "Konuyu sıfırla",
|
||||||
"publish_dialog_attach_reset": "Ek URL'sini kaldır",
|
"publish_dialog_attach_reset": "Ek URL'sini kaldır",
|
||||||
"publish_dialog_delay_reset": "Gecikmeli teslimatı kaldır",
|
"publish_dialog_delay_reset": "Gecikmeli teslimatı kaldır",
|
||||||
"publish_dialog_attached_file_remove": "Ekli dosyayı kaldır",
|
"publish_dialog_attached_file_remove": "Ekli dosyayı kaldır",
|
||||||
"emoji_picker_search_clear": "Aramayı temizle",
|
"emoji_picker_search_clear": "Aramayı temizle",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "Hizmet URL'si",
|
"subscribe_dialog_subscribe_base_url_label": "Hizmet URL'si",
|
||||||
"prefs_notifications_sound_play": "Seçilen sesi çal",
|
"prefs_notifications_sound_play": "Seçilen sesi çal",
|
||||||
"error_boundary_unsupported_indexeddb_description": "ntfy web uygulamasının çalışması için IndexedDB'ye ihtiyacı var ve tarayıcınız gizli tarama modunda IndexedDB'yi desteklemiyor.<br/><br/>Bu talihsiz olsa da, ntfy web uygulamasını gizli tarama modunda kullanmak pek mantıklı değildir, çünkü her şey tarayıcı deposunda saklanır. <githubLink>Bu GitHub sorununda</githubLink> bununla ilgili daha fazla bilgi edinebilir veya <discordLink>Discord</discordLink> veya <matrixLink>Matrix</matrixLink> üzerinden bizimle konuşabilirsiniz.",
|
"error_boundary_unsupported_indexeddb_description": "ntfy web uygulamasının çalışması için IndexedDB'ye ihtiyacı var ve tarayıcınız gizli tarama modunda IndexedDB'yi desteklemiyor.<br/><br/>Bu talihsiz olsa da, ntfy web uygulamasını gizli tarama modunda kullanmak pek mantıklı değildir, çünkü her şey tarayıcı deposunda saklanır. <githubLink>Bu GitHub sorununda</githubLink> bununla ilgili daha fazla bilgi edinebilir veya <discordLink>Discord</discordLink> veya <matrixLink>Matrix</matrixLink> üzerinden bizimle konuşabilirsiniz.",
|
||||||
"notifications_new_indicator": "Yeni bildirim",
|
"notifications_new_indicator": "Yeni bildirim",
|
||||||
"action_bar_toggle_mute": "Bildirimleri sesini kapat/aç",
|
"action_bar_toggle_mute": "Bildirimleri sesini kapat/aç",
|
||||||
"publish_dialog_click_reset": "Tıklama URL'sini kaldır",
|
"publish_dialog_click_reset": "Tıklama URL'sini kaldır",
|
||||||
"prefs_users_table": "Kullanıcılar tablosu",
|
"prefs_users_table": "Kullanıcılar tablosu",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Gizli tarama desteklenmiyor",
|
"error_boundary_unsupported_indexeddb_title": "Gizli tarama desteklenmiyor",
|
||||||
"nav_button_muted": "Bildirimler sessize alındı",
|
"nav_button_muted": "Bildirimler sessize alındı",
|
||||||
"notifications_mark_read": "Okundu olarak işaretle",
|
"notifications_mark_read": "Okundu olarak işaretle",
|
||||||
"notifications_priority_x": "Öncelik {{priority}}",
|
"notifications_priority_x": "Öncelik {{priority}}",
|
||||||
"publish_dialog_email_reset": "E-posta yönlendirmesini kaldır",
|
"publish_dialog_email_reset": "E-posta yönlendirmesini kaldır",
|
||||||
"prefs_users_edit_button": "Kullanıcıyı düzenle",
|
"prefs_users_edit_button": "Kullanıcıyı düzenle",
|
||||||
"prefs_users_delete_button": "Kullanıcı sil"
|
"prefs_users_delete_button": "Kullanıcı sil"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_logo_alt": "логотип ntfy",
|
"action_bar_logo_alt": "логотип ntfy",
|
||||||
"action_bar_settings": "Налаштування",
|
"action_bar_settings": "Налаштування",
|
||||||
"message_bar_type_message": "Введіть повідомлення тут",
|
"message_bar_type_message": "Введіть повідомлення тут",
|
||||||
"message_bar_error_publishing": "Помилка публікації сповіщення",
|
"message_bar_error_publishing": "Помилка публікації сповіщення",
|
||||||
"message_bar_show_dialog": "Показати діалогове вікно публікації",
|
"message_bar_show_dialog": "Показати діалогове вікно публікації",
|
||||||
"nav_topics_title": "Підписки на теми",
|
"nav_topics_title": "Підписки на теми",
|
||||||
"nav_button_settings": "Налаштування",
|
"nav_button_settings": "Налаштування",
|
||||||
"nav_button_documentation": "Документація",
|
"nav_button_documentation": "Документація",
|
||||||
"nav_button_subscribe": "Підписатися на тему",
|
"nav_button_subscribe": "Підписатися на тему",
|
||||||
"nav_button_muted": "Сповіщення вимкнено",
|
"nav_button_muted": "Сповіщення вимкнено",
|
||||||
"nav_button_connecting": "підключення",
|
"nav_button_connecting": "підключення",
|
||||||
"alert_grant_title": "Сповіщення вимкнено",
|
"alert_grant_title": "Сповіщення вимкнено",
|
||||||
"alert_grant_description": "Дозвольте браузеру показувати сповіщення.",
|
"alert_grant_description": "Дозвольте браузеру показувати сповіщення.",
|
||||||
"alert_grant_button": "Дозволити",
|
"alert_grant_button": "Дозволити",
|
||||||
"alert_not_supported_title": "Сповіщення не підтримуються",
|
"alert_not_supported_title": "Сповіщення не підтримуються",
|
||||||
"notifications_list_item": "Сповіщення",
|
"notifications_list_item": "Сповіщення",
|
||||||
"notifications_attachment_image": "Прикріплене зображення",
|
"notifications_attachment_image": "Прикріплене зображення",
|
||||||
"notifications_attachment_open_title": "Перейти на {{url}}",
|
"notifications_attachment_open_title": "Перейти на {{url}}",
|
||||||
"notifications_attachment_open_button": "Відкрити вкладення",
|
"notifications_attachment_open_button": "Відкрити вкладення",
|
||||||
"notifications_attachment_link_expires": "термін дії посилання закінчується {{date}}",
|
"notifications_attachment_link_expires": "термін дії посилання закінчується {{date}}",
|
||||||
"notifications_actions_http_request_title": "Надіслати HTTP {{method}} на {{url}}",
|
"notifications_actions_http_request_title": "Надіслати HTTP {{method}} на {{url}}",
|
||||||
"notifications_none_for_any_title": "Ви не отримали жодних сповіщень.",
|
"notifications_none_for_any_title": "Ви не отримали жодних сповіщень.",
|
||||||
"notifications_no_subscriptions_description": "Натисніть \"{{linktext}}\" посилання, щоб створити або підписатися на тему. Після цього ви зможете надсилати повідомлення за допомогою PUT або POST, і ви отримуватимете тут повідомлення.",
|
"notifications_no_subscriptions_description": "Натисніть \"{{linktext}}\" посилання, щоб створити або підписатися на тему. Після цього ви зможете надсилати повідомлення за допомогою PUT або POST, і ви отримуватимете тут повідомлення.",
|
||||||
"notifications_more_details": "Додаткову інформацію можна знайти на <websiteLink>сайті</websiteLink> або в <docsLink>документації</docsLink>.",
|
"notifications_more_details": "Додаткову інформацію можна знайти на <websiteLink>сайті</websiteLink> або в <docsLink>документації</docsLink>.",
|
||||||
"notifications_loading": "Завантаження сповіщень…",
|
"notifications_loading": "Завантаження сповіщень…",
|
||||||
"publish_dialog_title_topic": "Опублікувати в {{topic}}",
|
"publish_dialog_title_topic": "Опублікувати в {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "Опублікувати сповіщення",
|
"publish_dialog_title_no_topic": "Опублікувати сповіщення",
|
||||||
"publish_dialog_progress_uploading": "Завантаження…",
|
"publish_dialog_progress_uploading": "Завантаження…",
|
||||||
"publish_dialog_message_published": "Сповіщення опубліковано",
|
"publish_dialog_message_published": "Сповіщення опубліковано",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "перевищує квоту, залишилося {{remainingBytes}}",
|
"publish_dialog_attachment_limits_quota_reached": "перевищує квоту, залишилося {{remainingBytes}}",
|
||||||
"publish_dialog_priority_low": "Низький пріоритет",
|
"publish_dialog_priority_low": "Низький пріоритет",
|
||||||
"publish_dialog_topic_label": "Назва теми",
|
"publish_dialog_topic_label": "Назва теми",
|
||||||
"publish_dialog_topic_placeholder": "Назва теми, наприклад phil_alerts",
|
"publish_dialog_topic_placeholder": "Назва теми, наприклад phil_alerts",
|
||||||
"publish_dialog_topic_reset": "Скинути тему",
|
"publish_dialog_topic_reset": "Скинути тему",
|
||||||
"publish_dialog_title_label": "Заголовок",
|
"publish_dialog_title_label": "Заголовок",
|
||||||
"publish_dialog_title_placeholder": "Заголовок сповіщення, наприклад Сповіщення про дисковий простір",
|
"publish_dialog_title_placeholder": "Заголовок сповіщення, наприклад Сповіщення про дисковий простір",
|
||||||
"publish_dialog_message_label": "Повідомлення",
|
"publish_dialog_message_label": "Повідомлення",
|
||||||
"publish_dialog_message_placeholder": "Введіть повідомлення",
|
"publish_dialog_message_placeholder": "Введіть повідомлення",
|
||||||
"publish_dialog_tags_label": "Теги",
|
"publish_dialog_tags_label": "Теги",
|
||||||
"publish_dialog_tags_placeholder": "Список тегів розділений комою, наприклад warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "Список тегів розділений комою, наприклад warning, srv1-backup",
|
||||||
"publish_dialog_click_placeholder": "URL-адреса, яка відкривається після натискання сповіщення",
|
"publish_dialog_click_placeholder": "URL-адреса, яка відкривається після натискання сповіщення",
|
||||||
"publish_dialog_email_label": "Електронна пошта",
|
"publish_dialog_email_label": "Електронна пошта",
|
||||||
"publish_dialog_attach_placeholder": "Прикріпіть файл за URL-адресою, наприклад https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Прикріпіть файл за URL-адресою, наприклад https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_attach_reset": "Видалити URL вкладення",
|
"publish_dialog_attach_reset": "Видалити URL вкладення",
|
||||||
"publish_dialog_filename_placeholder": "Ім'я файлу вкладення",
|
"publish_dialog_filename_placeholder": "Ім'я файлу вкладення",
|
||||||
"publish_dialog_delay_reset": "Видалити затримку доставлення",
|
"publish_dialog_delay_reset": "Видалити затримку доставлення",
|
||||||
"publish_dialog_chip_click_label": "Адреса",
|
"publish_dialog_chip_click_label": "Адреса",
|
||||||
"publish_dialog_chip_email_label": "Переслати на електронну пошту",
|
"publish_dialog_chip_email_label": "Переслати на електронну пошту",
|
||||||
"publish_dialog_chip_topic_label": "Змінити тему",
|
"publish_dialog_chip_topic_label": "Змінити тему",
|
||||||
"publish_dialog_attached_file_remove": "Видалити прикріплений файл",
|
"publish_dialog_attached_file_remove": "Видалити прикріплений файл",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Назва теми, наприклад phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "Назва теми, наприклад phil_alerts",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Використовувати інший сервер",
|
"subscribe_dialog_subscribe_use_another_label": "Використовувати інший сервер",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL служби",
|
"subscribe_dialog_subscribe_base_url_label": "URL служби",
|
||||||
"subscribe_dialog_login_password_label": "Пароль",
|
"subscribe_dialog_login_password_label": "Пароль",
|
||||||
"subscribe_dialog_login_button_back": "Назад",
|
"subscribe_dialog_login_button_back": "Назад",
|
||||||
"subscribe_dialog_error_user_not_authorized": "{{username}} користувач не авторизований",
|
"subscribe_dialog_error_user_not_authorized": "{{username}} користувач не авторизований",
|
||||||
"prefs_notifications_sound_description_none": "Сповіщення не відтворюють жодного звуку при надходженні",
|
"prefs_notifications_sound_description_none": "Сповіщення не відтворюють жодного звуку при надходженні",
|
||||||
"prefs_notifications_sound_description_some": "Сповіщення відтворюють звук {{sound}}",
|
"prefs_notifications_sound_description_some": "Сповіщення відтворюють звук {{sound}}",
|
||||||
"prefs_notifications_min_priority_description_any": "Показати всі сповіщень, незалежно від пріоритету",
|
"prefs_notifications_min_priority_description_any": "Показати всі сповіщень, незалежно від пріоритету",
|
||||||
"prefs_notifications_min_priority_any": "Будь-який пріоритет",
|
"prefs_notifications_min_priority_any": "Будь-який пріоритет",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Пріоритет за замовчуванням та високий",
|
"prefs_notifications_min_priority_default_and_higher": "Пріоритет за замовчуванням та високий",
|
||||||
"prefs_notifications_delete_after_title": "Видалити сповіщення",
|
"prefs_notifications_delete_after_title": "Видалити сповіщення",
|
||||||
"prefs_notifications_delete_after_never": "Ніколи",
|
"prefs_notifications_delete_after_never": "Ніколи",
|
||||||
"prefs_notifications_delete_after_one_day": "Через день",
|
"prefs_notifications_delete_after_one_day": "Через день",
|
||||||
"prefs_notifications_delete_after_one_week": "Через тиждень",
|
"prefs_notifications_delete_after_one_week": "Через тиждень",
|
||||||
"prefs_notifications_delete_after_one_month": "Через місяць",
|
"prefs_notifications_delete_after_one_month": "Через місяць",
|
||||||
"prefs_notifications_delete_after_never_description": "Сповіщення ніколи не видаляються автоматично",
|
"prefs_notifications_delete_after_never_description": "Сповіщення ніколи не видаляються автоматично",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Сповіщення автоматично видаляються через три години",
|
"prefs_notifications_delete_after_three_hours_description": "Сповіщення автоматично видаляються через три години",
|
||||||
"prefs_notifications_delete_after_one_day_description": "Сповіщення автоматично видаляються через один день",
|
"prefs_notifications_delete_after_one_day_description": "Сповіщення автоматично видаляються через один день",
|
||||||
"prefs_notifications_delete_after_one_week_description": "Сповіщення автоматично видаляються через тиждень",
|
"prefs_notifications_delete_after_one_week_description": "Сповіщення автоматично видаляються через тиждень",
|
||||||
"prefs_notifications_delete_after_one_month_description": "Сповіщення автоматично видаляються через місяць",
|
"prefs_notifications_delete_after_one_month_description": "Сповіщення автоматично видаляються через місяць",
|
||||||
"prefs_users_title": "Керувати користувачами",
|
"prefs_users_title": "Керувати користувачами",
|
||||||
"prefs_users_table": "Таблиця користувачів",
|
"prefs_users_table": "Таблиця користувачів",
|
||||||
"prefs_users_edit_button": "Редагувати користувача",
|
"prefs_users_edit_button": "Редагувати користувача",
|
||||||
"prefs_users_dialog_button_save": "Зберегти",
|
"prefs_users_dialog_button_save": "Зберегти",
|
||||||
"prefs_appearance_title": "Зовнішній вигляд",
|
"prefs_appearance_title": "Зовнішній вигляд",
|
||||||
"priority_default": "за замовчуванням",
|
"priority_default": "за замовчуванням",
|
||||||
"priority_high": "високий",
|
"priority_high": "високий",
|
||||||
"priority_max": "макс",
|
"priority_max": "макс",
|
||||||
"error_boundary_title": "Ой, ntfy впав",
|
"error_boundary_title": "Ой, ntfy впав",
|
||||||
"error_boundary_button_copy_stack_trace": "Копіювати трасування стека",
|
"error_boundary_button_copy_stack_trace": "Копіювати трасування стека",
|
||||||
"action_bar_show_menu": "Показати меню",
|
"action_bar_show_menu": "Показати меню",
|
||||||
"action_bar_toggle_action_menu": "Відкрити/закрити меню",
|
"action_bar_toggle_action_menu": "Відкрити/закрити меню",
|
||||||
"action_bar_send_test_notification": "Надіслати тестове сповіщення",
|
"action_bar_send_test_notification": "Надіслати тестове сповіщення",
|
||||||
"action_bar_clear_notifications": "Очистити всі сповіщення",
|
"action_bar_clear_notifications": "Очистити всі сповіщення",
|
||||||
"action_bar_toggle_mute": "Вимкнути/увімкнути сповіщення",
|
"action_bar_toggle_mute": "Вимкнути/увімкнути сповіщення",
|
||||||
"action_bar_unsubscribe": "Відписатися",
|
"action_bar_unsubscribe": "Відписатися",
|
||||||
"message_bar_publish": "Опублікувати повідомлення",
|
"message_bar_publish": "Опублікувати повідомлення",
|
||||||
"nav_button_all_notifications": "Усі сповіщення",
|
"nav_button_all_notifications": "Усі сповіщення",
|
||||||
"alert_not_supported_description": "Ваш браузер не підтримує сповіщення.",
|
"alert_not_supported_description": "Ваш браузер не підтримує сповіщення.",
|
||||||
"notifications_list": "Список сповіщень",
|
"notifications_list": "Список сповіщень",
|
||||||
"notifications_mark_read": "Позначити як прочитане",
|
"notifications_mark_read": "Позначити як прочитане",
|
||||||
"notifications_delete": "Видалити",
|
"notifications_delete": "Видалити",
|
||||||
"notifications_tags": "Теги",
|
"notifications_tags": "Теги",
|
||||||
"nav_button_publish_message": "Опублікувати сповіщення",
|
"nav_button_publish_message": "Опублікувати сповіщення",
|
||||||
"notifications_attachment_copy_url_title": "Копіювати URL-адресу вкладення",
|
"notifications_attachment_copy_url_title": "Копіювати URL-адресу вкладення",
|
||||||
"notifications_attachment_link_expired": "термін дії посилання для завантаження закінчився",
|
"notifications_attachment_link_expired": "термін дії посилання для завантаження закінчився",
|
||||||
"publish_dialog_progress_uploading_detail": "Завантажується {{loaded}}/{{total}} ({{percent}}%) …",
|
"publish_dialog_progress_uploading_detail": "Завантажується {{loaded}}/{{total}} ({{percent}}%) …",
|
||||||
"notifications_priority_x": "Пріоритет {{priority}}",
|
"notifications_priority_x": "Пріоритет {{priority}}",
|
||||||
"notifications_attachment_copy_url_button": "Копіювати URL-адресу",
|
"notifications_attachment_copy_url_button": "Копіювати URL-адресу",
|
||||||
"notifications_copied_to_clipboard": "Скопійовано в буфер обміну",
|
"notifications_copied_to_clipboard": "Скопійовано в буфер обміну",
|
||||||
"notifications_attachment_file_video": "відео файл",
|
"notifications_attachment_file_video": "відео файл",
|
||||||
"notifications_attachment_file_audio": "звуковий файл",
|
"notifications_attachment_file_audio": "звуковий файл",
|
||||||
"publish_dialog_emoji_picker_show": "Виберіть емодзі",
|
"publish_dialog_emoji_picker_show": "Виберіть емодзі",
|
||||||
"notifications_new_indicator": "Нове сповіщення",
|
"notifications_new_indicator": "Нове сповіщення",
|
||||||
"notifications_attachment_file_image": "файл зображення",
|
"notifications_attachment_file_image": "файл зображення",
|
||||||
"notifications_attachment_file_document": "інший документ",
|
"notifications_attachment_file_document": "інший документ",
|
||||||
"notifications_click_copy_url_title": "Копіювати URL-адресу посилання",
|
"notifications_click_copy_url_title": "Копіювати URL-адресу посилання",
|
||||||
"notifications_click_copy_url_button": "Копіювати посилання",
|
"notifications_click_copy_url_button": "Копіювати посилання",
|
||||||
"notifications_actions_not_supported": "Дія не підтримується у браузері",
|
"notifications_actions_not_supported": "Дія не підтримується у браузері",
|
||||||
"notifications_attachment_file_app": "Файл програми Android",
|
"notifications_attachment_file_app": "Файл програми Android",
|
||||||
"notifications_click_open_button": "Відкрити посилання",
|
"notifications_click_open_button": "Відкрити посилання",
|
||||||
"notifications_actions_open_url_title": "Перейти на {{url}}",
|
"notifications_actions_open_url_title": "Перейти на {{url}}",
|
||||||
"notifications_none_for_topic_description": "Щоб надіслати сповіщення до цієї теми, просто надішліть PUT або POST на URL-адресу цієї теми.",
|
"notifications_none_for_topic_description": "Щоб надіслати сповіщення до цієї теми, просто надішліть PUT або POST на URL-адресу цієї теми.",
|
||||||
"notifications_no_subscriptions_title": "Схоже, у вас ще немає жодної підписки.",
|
"notifications_no_subscriptions_title": "Схоже, у вас ще немає жодної підписки.",
|
||||||
"publish_dialog_drop_file_here": "Перетягніть файл сюди",
|
"publish_dialog_drop_file_here": "Перетягніть файл сюди",
|
||||||
"notifications_none_for_topic_title": "Ви ще не отримували сповіщення на цю тему.",
|
"notifications_none_for_topic_title": "Ви ще не отримували сповіщення на цю тему.",
|
||||||
"notifications_example": "Приклад",
|
"notifications_example": "Приклад",
|
||||||
"notifications_none_for_any_description": "Щоб надіслати сповіщення до теми, просто надішліть PUT або POST на URL-адресу теми. Ось приклад, використовуючи одну з ваших тем.",
|
"notifications_none_for_any_description": "Щоб надіслати сповіщення до теми, просто надішліть PUT або POST на URL-адресу теми. Ось приклад, використовуючи одну з ваших тем.",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "перевищує {{fileSizeLimit}} розмір файлу, {{remainingBytes}} залишилося",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "перевищує {{fileSizeLimit}} розмір файлу, {{remainingBytes}} залишилося",
|
||||||
"publish_dialog_priority_default": "Пріоритет за замовчуванням",
|
"publish_dialog_priority_default": "Пріоритет за замовчуванням",
|
||||||
"publish_dialog_attachment_limits_file_reached": "перевищує {{fileSizeLimit}} розмір файлу",
|
"publish_dialog_attachment_limits_file_reached": "перевищує {{fileSizeLimit}} розмір файлу",
|
||||||
"publish_dialog_priority_min": "Мін. пріоритет",
|
"publish_dialog_priority_min": "Мін. пріоритет",
|
||||||
"publish_dialog_priority_high": "Високий пріоритет",
|
"publish_dialog_priority_high": "Високий пріоритет",
|
||||||
"publish_dialog_priority_max": "Макс. пріоритет",
|
"publish_dialog_priority_max": "Макс. пріоритет",
|
||||||
"publish_dialog_base_url_placeholder": "URL-адреса сервісу, наприклад https://example.com",
|
"publish_dialog_base_url_placeholder": "URL-адреса сервісу, наприклад https://example.com",
|
||||||
"publish_dialog_base_url_label": "URL служби",
|
"publish_dialog_base_url_label": "URL служби",
|
||||||
"publish_dialog_other_features": "Інші можливості:",
|
"publish_dialog_other_features": "Інші можливості:",
|
||||||
"publish_dialog_chip_attach_file_label": "Прикріпити локальний файл",
|
"publish_dialog_chip_attach_file_label": "Прикріпити локальний файл",
|
||||||
"publish_dialog_priority_label": "Пріоритет",
|
"publish_dialog_priority_label": "Пріоритет",
|
||||||
"publish_dialog_click_label": "Натисніть URL",
|
"publish_dialog_click_label": "Натисніть URL",
|
||||||
"publish_dialog_click_reset": "Видалити URL-адресу для натискання",
|
"publish_dialog_click_reset": "Видалити URL-адресу для натискання",
|
||||||
"publish_dialog_email_placeholder": "Адреса для пересилання сповіщення, наприклад phil@example.com",
|
"publish_dialog_email_placeholder": "Адреса для пересилання сповіщення, наприклад phil@example.com",
|
||||||
"publish_dialog_attach_label": "URL-адреса вкладення",
|
"publish_dialog_attach_label": "URL-адреса вкладення",
|
||||||
"publish_dialog_filename_label": "Ім'я файлу",
|
"publish_dialog_filename_label": "Ім'я файлу",
|
||||||
"publish_dialog_delay_label": "Затримка",
|
"publish_dialog_delay_label": "Затримка",
|
||||||
"publish_dialog_email_reset": "Видалити пересилання електронної пошти",
|
"publish_dialog_email_reset": "Видалити пересилання електронної пошти",
|
||||||
"publish_dialog_chip_attach_url_label": "Прикріпити файл за URL",
|
"publish_dialog_chip_attach_url_label": "Прикріпити файл за URL",
|
||||||
"publish_dialog_details_examples_description": "Приклади та докладний опис усіх функцій, зверніться до <docsLink>документації</docsLink>.",
|
"publish_dialog_details_examples_description": "Приклади та докладний опис усіх функцій, зверніться до <docsLink>документації</docsLink>.",
|
||||||
"publish_dialog_button_cancel_sending": "Скасувати відправку",
|
"publish_dialog_button_cancel_sending": "Скасувати відправку",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "Ім'я прикріпленого файлу",
|
"publish_dialog_attached_file_filename_placeholder": "Ім'я прикріпленого файлу",
|
||||||
"publish_dialog_delay_placeholder": "Затримка доставлення, наприклад {{unixTimestamp}}, {{relativeTime}} або \"{{naturalLanguage}}\" (лише англійською)",
|
"publish_dialog_delay_placeholder": "Затримка доставлення, наприклад {{unixTimestamp}}, {{relativeTime}} або \"{{naturalLanguage}}\" (лише англійською)",
|
||||||
"publish_dialog_button_send": "Надіслати",
|
"publish_dialog_button_send": "Надіслати",
|
||||||
"publish_dialog_checkbox_publish_another": "Опублікувати ще",
|
"publish_dialog_checkbox_publish_another": "Опублікувати ще",
|
||||||
"publish_dialog_chip_delay_label": "Затримка доставлення",
|
"publish_dialog_chip_delay_label": "Затримка доставлення",
|
||||||
"publish_dialog_button_cancel": "Скасувати",
|
"publish_dialog_button_cancel": "Скасувати",
|
||||||
"publish_dialog_attached_file_title": "Прикріплений файл:",
|
"publish_dialog_attached_file_title": "Прикріплений файл:",
|
||||||
"subscribe_dialog_subscribe_description": "Теми можуть не бути захищені паролем, тому виберіть назву, яку нелегко вгадати. Після підписки ви можете PUT/POST сповіщення.",
|
"subscribe_dialog_subscribe_description": "Теми можуть не бути захищені паролем, тому виберіть назву, яку нелегко вгадати. Після підписки ви можете PUT/POST сповіщення.",
|
||||||
"emoji_picker_search_placeholder": "Пошук емодзі",
|
"emoji_picker_search_placeholder": "Пошук емодзі",
|
||||||
"emoji_picker_search_clear": "Очистити пошук",
|
"emoji_picker_search_clear": "Очистити пошук",
|
||||||
"subscribe_dialog_subscribe_title": "Підпишіться на тему",
|
"subscribe_dialog_subscribe_title": "Підпишіться на тему",
|
||||||
"subscribe_dialog_login_username_label": "Ім'я користувача, наприклад phil",
|
"subscribe_dialog_login_username_label": "Ім'я користувача, наприклад phil",
|
||||||
"prefs_notifications_title": "Сповіщення",
|
"prefs_notifications_title": "Сповіщення",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Скасувати",
|
"subscribe_dialog_subscribe_button_cancel": "Скасувати",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Підписатися",
|
"subscribe_dialog_subscribe_button_subscribe": "Підписатися",
|
||||||
"subscribe_dialog_error_user_anonymous": "анонімний",
|
"subscribe_dialog_error_user_anonymous": "анонімний",
|
||||||
"subscribe_dialog_login_title": "Потрібна авторизація",
|
"subscribe_dialog_login_title": "Потрібна авторизація",
|
||||||
"subscribe_dialog_login_description": "Ця тема захищена паролем. Будь ласка, введіть ім'я користувача та пароль, щоб підписатися.",
|
"subscribe_dialog_login_description": "Ця тема захищена паролем. Будь ласка, введіть ім'я користувача та пароль, щоб підписатися.",
|
||||||
"prefs_notifications_sound_title": "Звук сповіщення",
|
"prefs_notifications_sound_title": "Звук сповіщення",
|
||||||
"subscribe_dialog_login_button_login": "Логін",
|
"subscribe_dialog_login_button_login": "Логін",
|
||||||
"prefs_notifications_sound_no_sound": "Без звука",
|
"prefs_notifications_sound_no_sound": "Без звука",
|
||||||
"prefs_notifications_sound_play": "Відтворення вибраного звуку",
|
"prefs_notifications_sound_play": "Відтворення вибраного звуку",
|
||||||
"prefs_users_description": "Додайте/видаляйте користувачів для захищених тем. Зверніть увагу, що ім'я користувача та пароль зберігаються у локальному сховищі браузера.",
|
"prefs_users_description": "Додайте/видаляйте користувачів для захищених тем. Зверніть увагу, що ім'я користувача та пароль зберігаються у локальному сховищі браузера.",
|
||||||
"prefs_notifications_min_priority_title": "Мінімальний пріоритет",
|
"prefs_notifications_min_priority_title": "Мінімальний пріоритет",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Високий пріоритет і вище",
|
"prefs_notifications_min_priority_high_and_higher": "Високий пріоритет і вище",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Показувати сповіщення, якщо пріоритет {{number}} ({{name}}) або вище",
|
"prefs_notifications_min_priority_description_x_or_higher": "Показувати сповіщення, якщо пріоритет {{number}} ({{name}}) або вище",
|
||||||
"prefs_notifications_min_priority_description_max": "Показувати сповіщення, якщо пріоритет 5 (макс.)",
|
"prefs_notifications_min_priority_description_max": "Показувати сповіщення, якщо пріоритет 5 (макс.)",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Низький та високий пріоритет",
|
"prefs_notifications_min_priority_low_and_higher": "Низький та високий пріоритет",
|
||||||
"prefs_notifications_min_priority_max_only": "Тільки максимальний пріоритет",
|
"prefs_notifications_min_priority_max_only": "Тільки максимальний пріоритет",
|
||||||
"prefs_users_table_base_url_header": "URL служби",
|
"prefs_users_table_base_url_header": "URL служби",
|
||||||
"prefs_users_dialog_password_label": "Пароль",
|
"prefs_users_dialog_password_label": "Пароль",
|
||||||
"prefs_notifications_delete_after_three_hours": "Через три години",
|
"prefs_notifications_delete_after_three_hours": "Через три години",
|
||||||
"prefs_users_add_button": "Додати користувача",
|
"prefs_users_add_button": "Додати користувача",
|
||||||
"prefs_users_dialog_title_edit": "Редагувати користувача",
|
"prefs_users_dialog_title_edit": "Редагувати користувача",
|
||||||
"prefs_users_dialog_base_url_label": "URL-адреса служби, наприклад https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "URL-адреса служби, наприклад https://ntfy.sh",
|
||||||
"prefs_users_delete_button": "Видалити користувача",
|
"prefs_users_delete_button": "Видалити користувача",
|
||||||
"prefs_users_table_user_header": "Користувач",
|
"prefs_users_table_user_header": "Користувач",
|
||||||
"prefs_users_dialog_title_add": "Додати користувача",
|
"prefs_users_dialog_title_add": "Додати користувача",
|
||||||
"prefs_users_dialog_username_label": "Ім'я користувача, наприклад phil",
|
"prefs_users_dialog_username_label": "Ім'я користувача, наприклад phil",
|
||||||
"prefs_users_dialog_button_cancel": "Скасувати",
|
"prefs_users_dialog_button_cancel": "Скасувати",
|
||||||
"prefs_users_dialog_button_add": "Додати",
|
"prefs_users_dialog_button_add": "Додати",
|
||||||
"prefs_appearance_language_title": "Мова",
|
"prefs_appearance_language_title": "Мова",
|
||||||
"error_boundary_gathering_info": "Зберіть більше інформації…",
|
"error_boundary_gathering_info": "Зберіть більше інформації…",
|
||||||
"priority_min": "мін",
|
"priority_min": "мін",
|
||||||
"error_boundary_description": "Очевидно, цього не повинно статися. Дуже шкода.<br/>Якщо у вас є хвилина, <githubLink>повідомте про це на GitHub</githubLink> або повідомте нам через <discordLink>Discord</discordLink> або <matrixLink>Matrix</matrixLink> .",
|
"error_boundary_description": "Очевидно, цього не повинно статися. Дуже шкода.<br/>Якщо у вас є хвилина, <githubLink>повідомте про це на GitHub</githubLink> або повідомте нам через <discordLink>Discord</discordLink> або <matrixLink>Matrix</matrixLink> .",
|
||||||
"priority_low": "низький",
|
"priority_low": "низький",
|
||||||
"error_boundary_stack_trace": "Трасування стека",
|
"error_boundary_stack_trace": "Трасування стека",
|
||||||
"error_boundary_unsupported_indexeddb_title": "Приватний перегляд не підтримується",
|
"error_boundary_unsupported_indexeddb_title": "Приватний перегляд не підтримується",
|
||||||
"error_boundary_unsupported_indexeddb_description": "Веб-програма ntfy потребує IndexedDB для роботи, а ваш браузер не підтримує IndexedDB у режимі приватного перегляду.<br/><br/>На жаль, використання ntfy web не має сенсу у режимі приватного перегляду, оскільки все зберігається в пам’яті браузера. Ви можете прочитати більше про це <githubLink>у цьому випуску GitHub</githubLink> або поспілкуватися з нами на <discordLink>Discord</discordLink> або <matrixLink>Matrix</matrixLink>."
|
"error_boundary_unsupported_indexeddb_description": "Веб-програма ntfy потребує IndexedDB для роботи, а ваш браузер не підтримує IndexedDB у режимі приватного перегляду.<br/><br/>На жаль, використання ntfy web не має сенсу у режимі приватного перегляду, оскільки все зберігається в пам’яті браузера. Ви можете прочитати більше про це <githubLink>у цьому випуску GitHub</githubLink> або поспілкуватися з нами на <discordLink>Discord</discordLink> або <matrixLink>Matrix</matrixLink>."
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,191 +1,191 @@
|
||||||
{
|
{
|
||||||
"action_bar_show_menu": "显示菜单",
|
"action_bar_show_menu": "显示菜单",
|
||||||
"action_bar_logo_alt": "ntfy图标",
|
"action_bar_logo_alt": "ntfy图标",
|
||||||
"action_bar_settings": "设置",
|
"action_bar_settings": "设置",
|
||||||
"action_bar_send_test_notification": "发送测试通知",
|
"action_bar_send_test_notification": "发送测试通知",
|
||||||
"action_bar_clear_notifications": "清除所有通知",
|
"action_bar_clear_notifications": "清除所有通知",
|
||||||
"action_bar_unsubscribe": "取消订阅",
|
"action_bar_unsubscribe": "取消订阅",
|
||||||
"action_bar_toggle_action_menu": "开启或关闭操作菜单",
|
"action_bar_toggle_action_menu": "开启或关闭操作菜单",
|
||||||
"message_bar_type_message": "在此处输入消息",
|
"message_bar_type_message": "在此处输入消息",
|
||||||
"message_bar_show_dialog": "显示发布对话框",
|
"message_bar_show_dialog": "显示发布对话框",
|
||||||
"message_bar_publish": "发布消息",
|
"message_bar_publish": "发布消息",
|
||||||
"nav_topics_title": "订阅主题",
|
"nav_topics_title": "订阅主题",
|
||||||
"nav_button_all_notifications": "全部通知",
|
"nav_button_all_notifications": "全部通知",
|
||||||
"nav_button_documentation": "文档",
|
"nav_button_documentation": "文档",
|
||||||
"nav_button_publish_message": "发布通知",
|
"nav_button_publish_message": "发布通知",
|
||||||
"nav_button_subscribe": "订阅主题",
|
"nav_button_subscribe": "订阅主题",
|
||||||
"nav_button_connecting": "正在连接",
|
"nav_button_connecting": "正在连接",
|
||||||
"alert_grant_title": "已禁用通知",
|
"alert_grant_title": "已禁用通知",
|
||||||
"alert_grant_description": "授予浏览器显示桌面通知的权限。",
|
"alert_grant_description": "授予浏览器显示桌面通知的权限。",
|
||||||
"alert_grant_button": "现在授予",
|
"alert_grant_button": "现在授予",
|
||||||
"alert_not_supported_title": "不支持通知",
|
"alert_not_supported_title": "不支持通知",
|
||||||
"alert_not_supported_description": "您的浏览器不支持通知。",
|
"alert_not_supported_description": "您的浏览器不支持通知。",
|
||||||
"notifications_list": "通知列表",
|
"notifications_list": "通知列表",
|
||||||
"notifications_list_item": "通知",
|
"notifications_list_item": "通知",
|
||||||
"notifications_mark_read": "标记为已读",
|
"notifications_mark_read": "标记为已读",
|
||||||
"notifications_copied_to_clipboard": "复制到剪贴板",
|
"notifications_copied_to_clipboard": "复制到剪贴板",
|
||||||
"notifications_tags": "标记",
|
"notifications_tags": "标记",
|
||||||
"notifications_priority_x": "优先级 {{priority}}",
|
"notifications_priority_x": "优先级 {{priority}}",
|
||||||
"notifications_new_indicator": "新通知",
|
"notifications_new_indicator": "新通知",
|
||||||
"notifications_attachment_open_button": "打开附件",
|
"notifications_attachment_open_button": "打开附件",
|
||||||
"notifications_attachment_link_expires": "链接过期 {{date}}",
|
"notifications_attachment_link_expires": "链接过期 {{date}}",
|
||||||
"notifications_attachment_link_expired": "下载链接已过期",
|
"notifications_attachment_link_expired": "下载链接已过期",
|
||||||
"notifications_attachment_file_image": "图片文件",
|
"notifications_attachment_file_image": "图片文件",
|
||||||
"notifications_attachment_image": "附件图片",
|
"notifications_attachment_image": "附件图片",
|
||||||
"notifications_attachment_file_video": "视频文件",
|
"notifications_attachment_file_video": "视频文件",
|
||||||
"notifications_attachment_file_audio": "音频文件",
|
"notifications_attachment_file_audio": "音频文件",
|
||||||
"notifications_attachment_file_app": "安卓应用文件",
|
"notifications_attachment_file_app": "安卓应用文件",
|
||||||
"notifications_attachment_file_document": "其他文件",
|
"notifications_attachment_file_document": "其他文件",
|
||||||
"notifications_click_copy_url_title": "复制链接地址到剪贴板",
|
"notifications_click_copy_url_title": "复制链接地址到剪贴板",
|
||||||
"notifications_click_copy_url_button": "复制链接",
|
"notifications_click_copy_url_button": "复制链接",
|
||||||
"notifications_click_open_button": "打开链接",
|
"notifications_click_open_button": "打开链接",
|
||||||
"action_bar_toggle_mute": "暂停或恢复通知",
|
"action_bar_toggle_mute": "暂停或恢复通知",
|
||||||
"nav_button_muted": "已暂停通知",
|
"nav_button_muted": "已暂停通知",
|
||||||
"notifications_actions_not_supported": "网页应用程序不支持操作",
|
"notifications_actions_not_supported": "网页应用程序不支持操作",
|
||||||
"notifications_none_for_topic_title": "您尚未收到有关此主题的任何通知。",
|
"notifications_none_for_topic_title": "您尚未收到有关此主题的任何通知。",
|
||||||
"notifications_none_for_any_title": "您尚未收到任何通知。",
|
"notifications_none_for_any_title": "您尚未收到任何通知。",
|
||||||
"notifications_none_for_any_description": "要向此主题发送通知,只需使用 PUT 或 POST 到主题链接即可。以下是使用您的主题的示例。",
|
"notifications_none_for_any_description": "要向此主题发送通知,只需使用 PUT 或 POST 到主题链接即可。以下是使用您的主题的示例。",
|
||||||
"notifications_no_subscriptions_title": "看起来你还没有任何订阅。",
|
"notifications_no_subscriptions_title": "看起来你还没有任何订阅。",
|
||||||
"notifications_example": "示例",
|
"notifications_example": "示例",
|
||||||
"notifications_more_details": "有关更多信息,请查看<websiteLink>网站</websiteLink>或<docsLink>文档</docsLink>。",
|
"notifications_more_details": "有关更多信息,请查看<websiteLink>网站</websiteLink>或<docsLink>文档</docsLink>。",
|
||||||
"notifications_loading": "正在加载通知……",
|
"notifications_loading": "正在加载通知……",
|
||||||
"publish_dialog_title_topic": "发布到 {{topic}}",
|
"publish_dialog_title_topic": "发布到 {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "发布通知",
|
"publish_dialog_title_no_topic": "发布通知",
|
||||||
"publish_dialog_progress_uploading": "正在上传……",
|
"publish_dialog_progress_uploading": "正在上传……",
|
||||||
"publish_dialog_progress_uploading_detail": "正在上传 {{loaded}}/{{total}} ({{percent}}%) ……",
|
"publish_dialog_progress_uploading_detail": "正在上传 {{loaded}}/{{total}} ({{percent}}%) ……",
|
||||||
"publish_dialog_message_published": "已发布通知",
|
"publish_dialog_message_published": "已发布通知",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "超过 {{fileSizeLimit}} 文件限制和配额,剩余 {{remainingBytes}}",
|
"publish_dialog_attachment_limits_file_and_quota_reached": "超过 {{fileSizeLimit}} 文件限制和配额,剩余 {{remainingBytes}}",
|
||||||
"publish_dialog_emoji_picker_show": "选择表情符号",
|
"publish_dialog_emoji_picker_show": "选择表情符号",
|
||||||
"publish_dialog_priority_min": "最低优先级",
|
"publish_dialog_priority_min": "最低优先级",
|
||||||
"publish_dialog_priority_low": "低优先级",
|
"publish_dialog_priority_low": "低优先级",
|
||||||
"publish_dialog_priority_default": "默认优先级",
|
"publish_dialog_priority_default": "默认优先级",
|
||||||
"publish_dialog_priority_high": "高优先级",
|
"publish_dialog_priority_high": "高优先级",
|
||||||
"publish_dialog_priority_max": "最高优先级",
|
"publish_dialog_priority_max": "最高优先级",
|
||||||
"publish_dialog_topic_label": "主题名称",
|
"publish_dialog_topic_label": "主题名称",
|
||||||
"publish_dialog_topic_placeholder": "主题名称,例如 phil_alerts",
|
"publish_dialog_topic_placeholder": "主题名称,例如 phil_alerts",
|
||||||
"publish_dialog_topic_reset": "重置主题",
|
"publish_dialog_topic_reset": "重置主题",
|
||||||
"publish_dialog_title_label": "主题",
|
"publish_dialog_title_label": "主题",
|
||||||
"publish_dialog_message_label": "消息",
|
"publish_dialog_message_label": "消息",
|
||||||
"publish_dialog_message_placeholder": "在此输入消息",
|
"publish_dialog_message_placeholder": "在此输入消息",
|
||||||
"publish_dialog_tags_label": "标记",
|
"publish_dialog_tags_label": "标记",
|
||||||
"publish_dialog_priority_label": "优先级",
|
"publish_dialog_priority_label": "优先级",
|
||||||
"publish_dialog_base_url_label": "服务链接地址",
|
"publish_dialog_base_url_label": "服务链接地址",
|
||||||
"publish_dialog_base_url_placeholder": "服务链接地址,例如 https://example.com",
|
"publish_dialog_base_url_placeholder": "服务链接地址,例如 https://example.com",
|
||||||
"publish_dialog_click_label": "点击链接地址",
|
"publish_dialog_click_label": "点击链接地址",
|
||||||
"publish_dialog_click_placeholder": "点击通知时打开链接地址",
|
"publish_dialog_click_placeholder": "点击通知时打开链接地址",
|
||||||
"publish_dialog_email_placeholder": "将通知转发到的地址,例如 phil@example.com",
|
"publish_dialog_email_placeholder": "将通知转发到的地址,例如 phil@example.com",
|
||||||
"publish_dialog_email_reset": "移除电子邮件转发",
|
"publish_dialog_email_reset": "移除电子邮件转发",
|
||||||
"publish_dialog_filename_label": "文件名",
|
"publish_dialog_filename_label": "文件名",
|
||||||
"publish_dialog_filename_placeholder": "附件文件名",
|
"publish_dialog_filename_placeholder": "附件文件名",
|
||||||
"publish_dialog_delay_label": "延期",
|
"publish_dialog_delay_label": "延期",
|
||||||
"publish_dialog_other_features": "其它功能:",
|
"publish_dialog_other_features": "其它功能:",
|
||||||
"publish_dialog_attach_placeholder": "使用链接地址附加文件,例如 https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "使用链接地址附加文件,例如 https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_delay_reset": "删除延期投递",
|
"publish_dialog_delay_reset": "删除延期投递",
|
||||||
"publish_dialog_attach_reset": "移除附件链接地址",
|
"publish_dialog_attach_reset": "移除附件链接地址",
|
||||||
"publish_dialog_chip_click_label": "点击链接地址",
|
"publish_dialog_chip_click_label": "点击链接地址",
|
||||||
"publish_dialog_chip_email_label": "转发邮件",
|
"publish_dialog_chip_email_label": "转发邮件",
|
||||||
"publish_dialog_chip_attach_file_label": "本地文件附件",
|
"publish_dialog_chip_attach_file_label": "本地文件附件",
|
||||||
"publish_dialog_chip_topic_label": "变更主题",
|
"publish_dialog_chip_topic_label": "变更主题",
|
||||||
"publish_dialog_button_cancel_sending": "取消发送",
|
"publish_dialog_button_cancel_sending": "取消发送",
|
||||||
"publish_dialog_checkbox_publish_another": "发布另一个",
|
"publish_dialog_checkbox_publish_another": "发布另一个",
|
||||||
"publish_dialog_attached_file_title": "附件文件:",
|
"publish_dialog_attached_file_title": "附件文件:",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "附件文件名",
|
"publish_dialog_attached_file_filename_placeholder": "附件文件名",
|
||||||
"publish_dialog_attached_file_remove": "删除附件文件",
|
"publish_dialog_attached_file_remove": "删除附件文件",
|
||||||
"publish_dialog_drop_file_here": "将文件拖拽至此",
|
"publish_dialog_drop_file_here": "将文件拖拽至此",
|
||||||
"emoji_picker_search_placeholder": "查找表情符号",
|
"emoji_picker_search_placeholder": "查找表情符号",
|
||||||
"emoji_picker_search_clear": "清除搜索",
|
"emoji_picker_search_clear": "清除搜索",
|
||||||
"subscribe_dialog_subscribe_title": "订阅主题",
|
"subscribe_dialog_subscribe_title": "订阅主题",
|
||||||
"publish_dialog_chip_delay_label": "延期投递",
|
"publish_dialog_chip_delay_label": "延期投递",
|
||||||
"publish_dialog_chip_attach_url_label": "链接附件地址",
|
"publish_dialog_chip_attach_url_label": "链接附件地址",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "使用其他服务器",
|
"subscribe_dialog_subscribe_use_another_label": "使用其他服务器",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "订阅",
|
"subscribe_dialog_subscribe_button_subscribe": "订阅",
|
||||||
"subscribe_dialog_login_title": "请登录",
|
"subscribe_dialog_login_title": "请登录",
|
||||||
"subscribe_dialog_login_description": "本主题受密码保护,请输入用户名和密码进行订阅。",
|
"subscribe_dialog_login_description": "本主题受密码保护,请输入用户名和密码进行订阅。",
|
||||||
"subscribe_dialog_login_username_label": "用户名,例如 phil",
|
"subscribe_dialog_login_username_label": "用户名,例如 phil",
|
||||||
"subscribe_dialog_login_password_label": "密码",
|
"subscribe_dialog_login_password_label": "密码",
|
||||||
"subscribe_dialog_login_button_back": "返回",
|
"subscribe_dialog_login_button_back": "返回",
|
||||||
"subscribe_dialog_login_button_login": "登录",
|
"subscribe_dialog_login_button_login": "登录",
|
||||||
"subscribe_dialog_error_user_not_authorized": "未授权 {{username}} 用户",
|
"subscribe_dialog_error_user_not_authorized": "未授权 {{username}} 用户",
|
||||||
"subscribe_dialog_error_user_anonymous": "匿名",
|
"subscribe_dialog_error_user_anonymous": "匿名",
|
||||||
"prefs_notifications_title": "通知",
|
"prefs_notifications_title": "通知",
|
||||||
"prefs_notifications_sound_title": "通知提示音",
|
"prefs_notifications_sound_title": "通知提示音",
|
||||||
"prefs_notifications_sound_description_none": "收到通知时不播放任何声音",
|
"prefs_notifications_sound_description_none": "收到通知时不播放任何声音",
|
||||||
"prefs_notifications_sound_description_some": "收到通知时播放 {{sound}} 声音",
|
"prefs_notifications_sound_description_some": "收到通知时播放 {{sound}} 声音",
|
||||||
"prefs_notifications_sound_no_sound": "静音",
|
"prefs_notifications_sound_no_sound": "静音",
|
||||||
"prefs_notifications_sound_play": "播放选中声音",
|
"prefs_notifications_sound_play": "播放选中声音",
|
||||||
"prefs_notifications_min_priority_title": "最低优先级",
|
"prefs_notifications_min_priority_title": "最低优先级",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "仅显示优先级为{{number}}({{name}})或以上的通知",
|
"prefs_notifications_min_priority_description_x_or_higher": "仅显示优先级为{{number}}({{name}})或以上的通知",
|
||||||
"prefs_notifications_min_priority_description_max": "仅显示最高优先级的通知",
|
"prefs_notifications_min_priority_description_max": "仅显示最高优先级的通知",
|
||||||
"prefs_notifications_min_priority_any": "任意优先级",
|
"prefs_notifications_min_priority_any": "任意优先级",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "低优先级和更高优先级",
|
"prefs_notifications_min_priority_low_and_higher": "低优先级和更高优先级",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "默认优先级和更高优先级",
|
"prefs_notifications_min_priority_default_and_higher": "默认优先级和更高优先级",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "高优先级和更高优先级",
|
"prefs_notifications_min_priority_high_and_higher": "高优先级和更高优先级",
|
||||||
"prefs_notifications_min_priority_max_only": "仅最高优先级",
|
"prefs_notifications_min_priority_max_only": "仅最高优先级",
|
||||||
"prefs_notifications_delete_after_never": "从不",
|
"prefs_notifications_delete_after_never": "从不",
|
||||||
"prefs_notifications_delete_after_one_month": "一月后",
|
"prefs_notifications_delete_after_one_month": "一月后",
|
||||||
"prefs_notifications_delete_after_one_week": "一周后",
|
"prefs_notifications_delete_after_one_week": "一周后",
|
||||||
"prefs_notifications_delete_after_never_description": "永不自动删除通知",
|
"prefs_notifications_delete_after_never_description": "永不自动删除通知",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "三小时后自动删除通知",
|
"prefs_notifications_delete_after_three_hours_description": "三小时后自动删除通知",
|
||||||
"prefs_notifications_delete_after_one_day_description": "一天后自动删除通知",
|
"prefs_notifications_delete_after_one_day_description": "一天后自动删除通知",
|
||||||
"prefs_notifications_delete_after_one_week_description": "一周后自动删除通知",
|
"prefs_notifications_delete_after_one_week_description": "一周后自动删除通知",
|
||||||
"prefs_notifications_delete_after_one_month_description": "一月后后自动删除通知",
|
"prefs_notifications_delete_after_one_month_description": "一月后后自动删除通知",
|
||||||
"prefs_users_title": "管理用户",
|
"prefs_users_title": "管理用户",
|
||||||
"prefs_users_description": "在此处添加/删除受保护主题的用户。请注意,用户名和密码存储在浏览器的本地存储中。",
|
"prefs_users_description": "在此处添加/删除受保护主题的用户。请注意,用户名和密码存储在浏览器的本地存储中。",
|
||||||
"prefs_users_add_button": "添加用户",
|
"prefs_users_add_button": "添加用户",
|
||||||
"prefs_users_dialog_title_add": "添加用户",
|
"prefs_users_dialog_title_add": "添加用户",
|
||||||
"prefs_users_dialog_title_edit": "编辑用户",
|
"prefs_users_dialog_title_edit": "编辑用户",
|
||||||
"prefs_users_dialog_username_label": "用户名,例如 phil",
|
"prefs_users_dialog_username_label": "用户名,例如 phil",
|
||||||
"prefs_users_dialog_password_label": "密码",
|
"prefs_users_dialog_password_label": "密码",
|
||||||
"prefs_users_dialog_button_cancel": "取消",
|
"prefs_users_dialog_button_cancel": "取消",
|
||||||
"prefs_users_dialog_button_save": "保存",
|
"prefs_users_dialog_button_save": "保存",
|
||||||
"prefs_appearance_title": "外观",
|
"prefs_appearance_title": "外观",
|
||||||
"prefs_appearance_language_title": "语言",
|
"prefs_appearance_language_title": "语言",
|
||||||
"priority_min": "最低",
|
"priority_min": "最低",
|
||||||
"priority_low": "低",
|
"priority_low": "低",
|
||||||
"priority_default": "默认",
|
"priority_default": "默认",
|
||||||
"priority_high": "高",
|
"priority_high": "高",
|
||||||
"priority_max": "最高",
|
"priority_max": "最高",
|
||||||
"error_boundary_title": "天啊,ntfy 崩溃了",
|
"error_boundary_title": "天啊,ntfy 崩溃了",
|
||||||
"prefs_users_table_base_url_header": "服务链接地址",
|
"prefs_users_table_base_url_header": "服务链接地址",
|
||||||
"prefs_users_dialog_base_url_label": "服务链接地址,例如 https://ntfy.sh",
|
"prefs_users_dialog_base_url_label": "服务链接地址,例如 https://ntfy.sh",
|
||||||
"error_boundary_button_copy_stack_trace": "复制堆栈跟踪",
|
"error_boundary_button_copy_stack_trace": "复制堆栈跟踪",
|
||||||
"error_boundary_stack_trace": "堆栈跟踪",
|
"error_boundary_stack_trace": "堆栈跟踪",
|
||||||
"error_boundary_gathering_info": "收集更多信息……",
|
"error_boundary_gathering_info": "收集更多信息……",
|
||||||
"error_boundary_unsupported_indexeddb_title": "不支持隐私浏览",
|
"error_boundary_unsupported_indexeddb_title": "不支持隐私浏览",
|
||||||
"error_boundary_unsupported_indexeddb_description": "Ntfy Web应用程序需要IndexedDB才能运行,并且您的浏览器在私隐私浏览模式下不支持IndexedDB。<br/><br/>虽然这很不幸,但在隐私浏览模式下使用ntfy Web应用程序也没有多大意义,因为所有东西都存储在浏览器存储中。您可以在<githubLink>本GitHub问题</githubLink>中阅读有关它的更多信息,或者在<discordLink>Discord</discordLink>或<matrixLink>Matrix</matrixLink>上与我们交谈。",
|
"error_boundary_unsupported_indexeddb_description": "Ntfy Web应用程序需要IndexedDB才能运行,并且您的浏览器在私隐私浏览模式下不支持IndexedDB。<br/><br/>虽然这很不幸,但在隐私浏览模式下使用ntfy Web应用程序也没有多大意义,因为所有东西都存储在浏览器存储中。您可以在<githubLink>本GitHub问题</githubLink>中阅读有关它的更多信息,或者在<discordLink>Discord</discordLink>或<matrixLink>Matrix</matrixLink>上与我们交谈。",
|
||||||
"message_bar_error_publishing": "发布通知时出错",
|
"message_bar_error_publishing": "发布通知时出错",
|
||||||
"nav_button_settings": "设置",
|
"nav_button_settings": "设置",
|
||||||
"notifications_delete": "删除",
|
"notifications_delete": "删除",
|
||||||
"notifications_attachment_copy_url_title": "将附件中链接地址复制到剪贴板",
|
"notifications_attachment_copy_url_title": "将附件中链接地址复制到剪贴板",
|
||||||
"notifications_attachment_copy_url_button": "复制链接地址",
|
"notifications_attachment_copy_url_button": "复制链接地址",
|
||||||
"notifications_attachment_open_title": "转到 {{url}}",
|
"notifications_attachment_open_title": "转到 {{url}}",
|
||||||
"notifications_actions_http_request_title": "发送 HTTP {{method}} 到 {{url}}",
|
"notifications_actions_http_request_title": "发送 HTTP {{method}} 到 {{url}}",
|
||||||
"notifications_actions_open_url_title": "转到 {{url}}",
|
"notifications_actions_open_url_title": "转到 {{url}}",
|
||||||
"notifications_none_for_topic_description": "要向此主题发送通知,只需使用 PUT 或 POST 到主题链接即可。",
|
"notifications_none_for_topic_description": "要向此主题发送通知,只需使用 PUT 或 POST 到主题链接即可。",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "主题名,例如 phil_alerts",
|
"subscribe_dialog_subscribe_topic_placeholder": "主题名,例如 phil_alerts",
|
||||||
"notifications_no_subscriptions_description": "单击 \"{{linktext}}\" 链接以创建或订阅主题。之后,您可以使用 PUT 或 POST 发送消息,您将在这里收到通知。",
|
"notifications_no_subscriptions_description": "单击 \"{{linktext}}\" 链接以创建或订阅主题。之后,您可以使用 PUT 或 POST 发送消息,您将在这里收到通知。",
|
||||||
"publish_dialog_attachment_limits_file_reached": "超过 {{fileSizeLimit}} 文件限制",
|
"publish_dialog_attachment_limits_file_reached": "超过 {{fileSizeLimit}} 文件限制",
|
||||||
"publish_dialog_title_placeholder": "主题标题,例如 磁盘空间告警",
|
"publish_dialog_title_placeholder": "主题标题,例如 磁盘空间告警",
|
||||||
"publish_dialog_email_label": "电子邮件",
|
"publish_dialog_email_label": "电子邮件",
|
||||||
"publish_dialog_button_send": "发送",
|
"publish_dialog_button_send": "发送",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "超过配额,剩余 {{remainingBytes}}",
|
"publish_dialog_attachment_limits_quota_reached": "超过配额,剩余 {{remainingBytes}}",
|
||||||
"publish_dialog_attach_label": "附件链接地址",
|
"publish_dialog_attach_label": "附件链接地址",
|
||||||
"publish_dialog_click_reset": "移除点击连接地址",
|
"publish_dialog_click_reset": "移除点击连接地址",
|
||||||
"publish_dialog_button_cancel": "取消",
|
"publish_dialog_button_cancel": "取消",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "取消",
|
"subscribe_dialog_subscribe_button_cancel": "取消",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "服务地址地址",
|
"subscribe_dialog_subscribe_base_url_label": "服务地址地址",
|
||||||
"prefs_notifications_min_priority_description_any": "显示所有通知,无论优先级如何",
|
"prefs_notifications_min_priority_description_any": "显示所有通知,无论优先级如何",
|
||||||
"prefs_notifications_delete_after_title": "删除通知",
|
"prefs_notifications_delete_after_title": "删除通知",
|
||||||
"prefs_notifications_delete_after_three_hours": "三小时后",
|
"prefs_notifications_delete_after_three_hours": "三小时后",
|
||||||
"prefs_users_delete_button": "删除用户",
|
"prefs_users_delete_button": "删除用户",
|
||||||
"prefs_users_table_user_header": "用户",
|
"prefs_users_table_user_header": "用户",
|
||||||
"prefs_users_dialog_button_add": "添加",
|
"prefs_users_dialog_button_add": "添加",
|
||||||
"prefs_notifications_delete_after_one_day": "一天后",
|
"prefs_notifications_delete_after_one_day": "一天后",
|
||||||
"error_boundary_description": "这显然不应该发生。对此非常抱歉。<br/>如果您有时间,请<githubLink>在GitHub</githubLink>上报告,或通过<discordLink>Discord</discordLink>或<matrixLink>Matrix</matrixLink>告诉我们。",
|
"error_boundary_description": "这显然不应该发生。对此非常抱歉。<br/>如果您有时间,请<githubLink>在GitHub</githubLink>上报告,或通过<discordLink>Discord</discordLink>或<matrixLink>Matrix</matrixLink>告诉我们。",
|
||||||
"prefs_users_table": "用户表",
|
"prefs_users_table": "用户表",
|
||||||
"prefs_users_edit_button": "编辑用户",
|
"prefs_users_edit_button": "编辑用户",
|
||||||
"publish_dialog_tags_placeholder": "英文逗号分隔标记列表,例如 warning, srv1-backup",
|
"publish_dialog_tags_placeholder": "英文逗号分隔标记列表,例如 warning, srv1-backup",
|
||||||
"publish_dialog_details_examples_description": "有关所有发送功能的示例和详细说明,请参阅<docsLink>文档</docsLink>。",
|
"publish_dialog_details_examples_description": "有关所有发送功能的示例和详细说明,请参阅<docsLink>文档</docsLink>。",
|
||||||
"subscribe_dialog_subscribe_description": "主题可能不受密码保护,因此请选择一个不容易被猜中的名字。订阅后,您可以使用 PUT/POST 通知。",
|
"subscribe_dialog_subscribe_description": "主题可能不受密码保护,因此请选择一个不容易被猜中的名字。订阅后,您可以使用 PUT/POST 通知。",
|
||||||
"publish_dialog_delay_placeholder": "延期投递,例如 {{unixTimestamp}}、{{relativeTime}}或「{{naturalLanguage}}」(仅限英语)"
|
"publish_dialog_delay_placeholder": "延期投递,例如 {{unixTimestamp}}、{{relativeTime}}或「{{naturalLanguage}}」(仅限英语)"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,85 +1,85 @@
|
||||||
{
|
{
|
||||||
"action_bar_logo_alt": "ntfy 標識",
|
"action_bar_logo_alt": "ntfy 標識",
|
||||||
"action_bar_unsubscribe": "取消訂閱",
|
"action_bar_unsubscribe": "取消訂閱",
|
||||||
"action_bar_toggle_mute": "通知靜音/解除通知靜音",
|
"action_bar_toggle_mute": "通知靜音/解除通知靜音",
|
||||||
"action_bar_toggle_action_menu": "開啟/關閉操作選單",
|
"action_bar_toggle_action_menu": "開啟/關閉操作選單",
|
||||||
"message_bar_type_message": "在這邊輸入訊息",
|
"message_bar_type_message": "在這邊輸入訊息",
|
||||||
"alert_grant_description": "允許瀏覽器權限以顯示桌面通知。",
|
"alert_grant_description": "允許瀏覽器權限以顯示桌面通知。",
|
||||||
"alert_grant_button": "允許",
|
"alert_grant_button": "允許",
|
||||||
"notifications_list": "通知清單",
|
"notifications_list": "通知清單",
|
||||||
"notifications_list_item": "通知",
|
"notifications_list_item": "通知",
|
||||||
"notifications_mark_read": "標示已讀",
|
"notifications_mark_read": "標示已讀",
|
||||||
"notifications_attachment_image": "附加圖片",
|
"notifications_attachment_image": "附加圖片",
|
||||||
"notifications_attachment_copy_url_title": "複製附件 URL 到剪貼簿",
|
"notifications_attachment_copy_url_title": "複製附件 URL 到剪貼簿",
|
||||||
"notifications_attachment_copy_url_button": "複製 URL",
|
"notifications_attachment_copy_url_button": "複製 URL",
|
||||||
"notifications_attachment_open_title": "前往 {{url}}",
|
"notifications_attachment_open_title": "前往 {{url}}",
|
||||||
"notifications_attachment_open_button": "開啟附件",
|
"notifications_attachment_open_button": "開啟附件",
|
||||||
"notifications_attachment_link_expired": "下載連結已過期",
|
"notifications_attachment_link_expired": "下載連結已過期",
|
||||||
"notifications_attachment_file_video": "影片檔案",
|
"notifications_attachment_file_video": "影片檔案",
|
||||||
"notifications_attachment_file_app": "Android 應用程式檔案",
|
"notifications_attachment_file_app": "Android 應用程式檔案",
|
||||||
"notifications_attachment_file_document": "其他文件",
|
"notifications_attachment_file_document": "其他文件",
|
||||||
"notifications_click_copy_url_title": "複製連結 URL 到剪貼板",
|
"notifications_click_copy_url_title": "複製連結 URL 到剪貼板",
|
||||||
"notifications_click_copy_url_button": "複製連結",
|
"notifications_click_copy_url_button": "複製連結",
|
||||||
"notifications_click_open_button": "開啟連結",
|
"notifications_click_open_button": "開啟連結",
|
||||||
"notifications_actions_not_supported": "網頁程式無法支援該動作",
|
"notifications_actions_not_supported": "網頁程式無法支援該動作",
|
||||||
"notifications_actions_http_request_title": "傳送 HTTP {{method}} 到 {{url}}",
|
"notifications_actions_http_request_title": "傳送 HTTP {{method}} 到 {{url}}",
|
||||||
"notifications_none_for_topic_title": "尚未收到任何此主題的通知。",
|
"notifications_none_for_topic_title": "尚未收到任何此主題的通知。",
|
||||||
"notifications_none_for_topic_description": "如要寄送通知到此主題,請使用 PUT 或 POST 到此主題URL。",
|
"notifications_none_for_topic_description": "如要寄送通知到此主題,請使用 PUT 或 POST 到此主題URL。",
|
||||||
"notifications_none_for_any_title": "尚未收到任何通知。",
|
"notifications_none_for_any_title": "尚未收到任何通知。",
|
||||||
"action_bar_settings": "設定",
|
"action_bar_settings": "設定",
|
||||||
"action_bar_send_test_notification": "發送測試通知",
|
"action_bar_send_test_notification": "發送測試通知",
|
||||||
"action_bar_clear_notifications": "清除所有通知",
|
"action_bar_clear_notifications": "清除所有通知",
|
||||||
"action_bar_show_menu": "顯示選單",
|
"action_bar_show_menu": "顯示選單",
|
||||||
"nav_button_documentation": "文件",
|
"nav_button_documentation": "文件",
|
||||||
"nav_button_publish_message": "發佈通知",
|
"nav_button_publish_message": "發佈通知",
|
||||||
"nav_button_muted": "通知已靜音",
|
"nav_button_muted": "通知已靜音",
|
||||||
"notifications_copied_to_clipboard": "已複製到剪貼簿",
|
"notifications_copied_to_clipboard": "已複製到剪貼簿",
|
||||||
"message_bar_publish": "發佈訊息",
|
"message_bar_publish": "發佈訊息",
|
||||||
"message_bar_show_dialog": "顯示發佈對話框",
|
"message_bar_show_dialog": "顯示發佈對話框",
|
||||||
"message_bar_error_publishing": "發佈通知時發生錯誤",
|
"message_bar_error_publishing": "發佈通知時發生錯誤",
|
||||||
"nav_topics_title": "訂閱主題",
|
"nav_topics_title": "訂閱主題",
|
||||||
"nav_button_all_notifications": "所有通知",
|
"nav_button_all_notifications": "所有通知",
|
||||||
"nav_button_settings": "設定",
|
"nav_button_settings": "設定",
|
||||||
"nav_button_subscribe": "訂閱主題",
|
"nav_button_subscribe": "訂閱主題",
|
||||||
"nav_button_connecting": "連線中",
|
"nav_button_connecting": "連線中",
|
||||||
"alert_grant_title": "通知已關閉",
|
"alert_grant_title": "通知已關閉",
|
||||||
"alert_not_supported_title": "不支援通知",
|
"alert_not_supported_title": "不支援通知",
|
||||||
"alert_not_supported_description": "瀏覽器不支援通知。",
|
"alert_not_supported_description": "瀏覽器不支援通知。",
|
||||||
"notifications_tags": "標籤",
|
"notifications_tags": "標籤",
|
||||||
"notifications_priority_x": "優先度 {{priority}}",
|
"notifications_priority_x": "優先度 {{priority}}",
|
||||||
"notifications_new_indicator": "新通知",
|
"notifications_new_indicator": "新通知",
|
||||||
"notifications_attachment_file_audio": "聲音檔案",
|
"notifications_attachment_file_audio": "聲音檔案",
|
||||||
"notifications_delete": "刪除",
|
"notifications_delete": "刪除",
|
||||||
"notifications_attachment_link_expires": "連結在 {{date}} 過期",
|
"notifications_attachment_link_expires": "連結在 {{date}} 過期",
|
||||||
"notifications_attachment_file_image": "圖片檔案",
|
"notifications_attachment_file_image": "圖片檔案",
|
||||||
"notifications_actions_open_url_title": "前往 {{url}}",
|
"notifications_actions_open_url_title": "前往 {{url}}",
|
||||||
"notifications_no_subscriptions_title": "你尚未有任何訂閱。",
|
"notifications_no_subscriptions_title": "你尚未有任何訂閱。",
|
||||||
"notifications_example": "範例",
|
"notifications_example": "範例",
|
||||||
"notifications_more_details": "你可以在 <websiteLink>ntfy 網站</websiteLink>或者<docsLink>技術文件</docsLink>中查看更多資訊。",
|
"notifications_more_details": "你可以在 <websiteLink>ntfy 網站</websiteLink>或者<docsLink>技術文件</docsLink>中查看更多資訊。",
|
||||||
"notifications_loading": "載入中…",
|
"notifications_loading": "載入中…",
|
||||||
"publish_dialog_title_topic": "發佈到 {{topic}}",
|
"publish_dialog_title_topic": "發佈到 {{topic}}",
|
||||||
"publish_dialog_title_no_topic": "發佈通知",
|
"publish_dialog_title_no_topic": "發佈通知",
|
||||||
"publish_dialog_progress_uploading": "上傳中…",
|
"publish_dialog_progress_uploading": "上傳中…",
|
||||||
"publish_dialog_priority_label": "優先度",
|
"publish_dialog_priority_label": "優先度",
|
||||||
"publish_dialog_email_label": "電郵地址",
|
"publish_dialog_email_label": "電郵地址",
|
||||||
"publish_dialog_filename_label": "檔案名稱",
|
"publish_dialog_filename_label": "檔案名稱",
|
||||||
"publish_dialog_button_cancel": "取消",
|
"publish_dialog_button_cancel": "取消",
|
||||||
"publish_dialog_button_send": "傳送",
|
"publish_dialog_button_send": "傳送",
|
||||||
"publish_dialog_button_cancel_sending": "取消傳送",
|
"publish_dialog_button_cancel_sending": "取消傳送",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "取消",
|
"subscribe_dialog_subscribe_button_cancel": "取消",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "訂閱",
|
"subscribe_dialog_subscribe_button_subscribe": "訂閱",
|
||||||
"emoji_picker_search_clear": "清除",
|
"emoji_picker_search_clear": "清除",
|
||||||
"subscribe_dialog_login_password_label": "密碼",
|
"subscribe_dialog_login_password_label": "密碼",
|
||||||
"subscribe_dialog_login_button_back": "返回",
|
"subscribe_dialog_login_button_back": "返回",
|
||||||
"subscribe_dialog_login_button_login": "登入",
|
"subscribe_dialog_login_button_login": "登入",
|
||||||
"prefs_notifications_delete_after_never": "從不",
|
"prefs_notifications_delete_after_never": "從不",
|
||||||
"prefs_users_add_button": "新增使用者",
|
"prefs_users_add_button": "新增使用者",
|
||||||
"prefs_users_dialog_password_label": "密碼",
|
"prefs_users_dialog_password_label": "密碼",
|
||||||
"prefs_users_dialog_title_add": "新增使用者",
|
"prefs_users_dialog_title_add": "新增使用者",
|
||||||
"prefs_users_dialog_button_save": "儲存",
|
"prefs_users_dialog_button_save": "儲存",
|
||||||
"prefs_users_dialog_button_cancel": "取消",
|
"prefs_users_dialog_button_cancel": "取消",
|
||||||
"error_boundary_title": "歐買尬,ntfy 壞掉了",
|
"error_boundary_title": "歐買尬,ntfy 壞掉了",
|
||||||
"notifications_none_for_any_description": "要開始發送通知到一個主題,只需要對主題 URL 發送 HTTP PUT 或者 POST,例如:",
|
"notifications_none_for_any_description": "要開始發送通知到一個主題,只需要對主題 URL 發送 HTTP PUT 或者 POST,例如:",
|
||||||
"notifications_no_subscriptions_description": "點選 「{{linktext}}」 連結以建立或訂閱主題。完成後,你就可以使用 HTTP PUT 或者 POST 發送通知到這裡了!",
|
"notifications_no_subscriptions_description": "點選 「{{linktext}}」 連結以建立或訂閱主題。完成後,你就可以使用 HTTP PUT 或者 POST 發送通知到這裡了!",
|
||||||
"error_boundary_description": "很抱歉 ntfy 發生錯誤了。<br/>如果你有時間,煩請到<githubLink> Github </githubLink>回報錯誤,或者到<discordLink> Discord </discordLink>或者<matrixLink> Matrix 聊天室</matrixLink>裡面告訴我們。"
|
"error_boundary_description": "很抱歉 ntfy 發生錯誤了。<br/>如果你有時間,煩請到<githubLink> Github </githubLink>回報錯誤,或者到<discordLink> Discord </discordLink>或者<matrixLink> Matrix 聊天室</matrixLink>裡面告訴我們。"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,133 +1,140 @@
|
||||||
import {
|
import {
|
||||||
fetchLinesIterator,
|
fetchLinesIterator,
|
||||||
maybeWithBasicAuth,
|
maybeWithBasicAuth,
|
||||||
topicShortUrl,
|
topicShortUrl,
|
||||||
topicUrl,
|
topicUrl,
|
||||||
topicUrlAuth,
|
topicUrlAuth,
|
||||||
topicUrlJsonPoll,
|
topicUrlJsonPoll,
|
||||||
topicUrlJsonPollWithSince,
|
topicUrlJsonPollWithSince,
|
||||||
userStatsUrl
|
userStatsUrl,
|
||||||
} from "./utils";
|
} from "./utils";
|
||||||
import userManager from "./UserManager";
|
import userManager from "./UserManager";
|
||||||
|
|
||||||
class Api {
|
class Api {
|
||||||
async poll(baseUrl, topic, since) {
|
async poll(baseUrl, topic, since) {
|
||||||
const user = await userManager.get(baseUrl);
|
const user = await userManager.get(baseUrl);
|
||||||
const shortUrl = topicShortUrl(baseUrl, topic);
|
const shortUrl = topicShortUrl(baseUrl, topic);
|
||||||
const url = (since)
|
const url = since
|
||||||
? topicUrlJsonPollWithSince(baseUrl, topic, since)
|
? topicUrlJsonPollWithSince(baseUrl, topic, since)
|
||||||
: topicUrlJsonPoll(baseUrl, topic);
|
: topicUrlJsonPoll(baseUrl, topic);
|
||||||
const messages = [];
|
const messages = [];
|
||||||
const headers = maybeWithBasicAuth({}, user);
|
const headers = maybeWithBasicAuth({}, user);
|
||||||
console.log(`[Api] Polling ${url}`);
|
console.log(`[Api] Polling ${url}`);
|
||||||
for await (let line of fetchLinesIterator(url, headers)) {
|
for await (let line of fetchLinesIterator(url, headers)) {
|
||||||
console.log(`[Api, ${shortUrl}] Received message ${line}`);
|
console.log(`[Api, ${shortUrl}] Received message ${line}`);
|
||||||
messages.push(JSON.parse(line));
|
messages.push(JSON.parse(line));
|
||||||
}
|
|
||||||
return messages;
|
|
||||||
}
|
}
|
||||||
|
return messages;
|
||||||
|
}
|
||||||
|
|
||||||
async publish(baseUrl, topic, message, options) {
|
async publish(baseUrl, topic, message, options) {
|
||||||
const user = await userManager.get(baseUrl);
|
const user = await userManager.get(baseUrl);
|
||||||
console.log(`[Api] Publishing message to ${topicUrl(baseUrl, topic)}`);
|
console.log(`[Api] Publishing message to ${topicUrl(baseUrl, topic)}`);
|
||||||
const headers = {};
|
const headers = {};
|
||||||
const body = {
|
const body = {
|
||||||
topic: topic,
|
topic: topic,
|
||||||
message: message,
|
message: message,
|
||||||
...options
|
...options,
|
||||||
};
|
};
|
||||||
const response = await fetch(baseUrl, {
|
const response = await fetch(baseUrl, {
|
||||||
method: 'PUT',
|
method: "PUT",
|
||||||
body: JSON.stringify(body),
|
body: JSON.stringify(body),
|
||||||
headers: maybeWithBasicAuth(headers, user)
|
headers: maybeWithBasicAuth(headers, user),
|
||||||
});
|
});
|
||||||
if (response.status < 200 || response.status > 299) {
|
if (response.status < 200 || response.status > 299) {
|
||||||
throw new Error(`Unexpected response: ${response.status}`);
|
throw new Error(`Unexpected response: ${response.status}`);
|
||||||
}
|
|
||||||
return response;
|
|
||||||
}
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Publishes to a topic using XMLHttpRequest (XHR), and returns a Promise with the active request.
|
* Publishes to a topic using XMLHttpRequest (XHR), and returns a Promise with the active request.
|
||||||
* Unfortunately, fetch() does not support a progress hook, which is why XHR has to be used.
|
* Unfortunately, fetch() does not support a progress hook, which is why XHR has to be used.
|
||||||
*
|
*
|
||||||
* Firefox XHR bug:
|
* Firefox XHR bug:
|
||||||
* Firefox has a bug(?), which returns 0 and "" for all fields of the XHR response in the case of an error,
|
* Firefox has a bug(?), which returns 0 and "" for all fields of the XHR response in the case of an error,
|
||||||
* so we cannot determine the exact error. It also sometimes complains about CORS violations, even when the
|
* so we cannot determine the exact error. It also sometimes complains about CORS violations, even when the
|
||||||
* correct headers are clearly set. It's quite the odd behavior.
|
* correct headers are clearly set. It's quite the odd behavior.
|
||||||
*
|
*
|
||||||
* There is an example, and the bug report here:
|
* There is an example, and the bug report here:
|
||||||
* - https://bugzilla.mozilla.org/show_bug.cgi?id=1733755
|
* - https://bugzilla.mozilla.org/show_bug.cgi?id=1733755
|
||||||
* - https://gist.github.com/binwiederhier/627f146d1959799be207ad8c17a8f345
|
* - https://gist.github.com/binwiederhier/627f146d1959799be207ad8c17a8f345
|
||||||
*/
|
*/
|
||||||
publishXHR(url, body, headers, onProgress) {
|
publishXHR(url, body, headers, onProgress) {
|
||||||
console.log(`[Api] Publishing message to ${url}`);
|
console.log(`[Api] Publishing message to ${url}`);
|
||||||
const xhr = new XMLHttpRequest();
|
const xhr = new XMLHttpRequest();
|
||||||
const send = new Promise(function (resolve, reject) {
|
const send = new Promise(function (resolve, reject) {
|
||||||
xhr.open("PUT", url);
|
xhr.open("PUT", url);
|
||||||
if (body.type) {
|
if (body.type) {
|
||||||
xhr.overrideMimeType(body.type);
|
xhr.overrideMimeType(body.type);
|
||||||
|
}
|
||||||
|
for (const [key, value] of Object.entries(headers)) {
|
||||||
|
xhr.setRequestHeader(key, value);
|
||||||
|
}
|
||||||
|
xhr.upload.addEventListener("progress", onProgress);
|
||||||
|
xhr.addEventListener("readystatechange", (ev) => {
|
||||||
|
if (xhr.readyState === 4 && xhr.status >= 200 && xhr.status <= 299) {
|
||||||
|
console.log(
|
||||||
|
`[Api] Publish successful (HTTP ${xhr.status})`,
|
||||||
|
xhr.response,
|
||||||
|
);
|
||||||
|
resolve(xhr.response);
|
||||||
|
} else if (xhr.readyState === 4) {
|
||||||
|
// Firefox bug; see description above!
|
||||||
|
console.log(
|
||||||
|
`[Api] Publish failed (HTTP ${xhr.status})`,
|
||||||
|
xhr.responseText,
|
||||||
|
);
|
||||||
|
let errorText;
|
||||||
|
try {
|
||||||
|
const error = JSON.parse(xhr.responseText);
|
||||||
|
if (error.code && error.error) {
|
||||||
|
errorText = `Error ${error.code}: ${error.error}`;
|
||||||
}
|
}
|
||||||
for (const [key, value] of Object.entries(headers)) {
|
} catch (e) {
|
||||||
xhr.setRequestHeader(key, value);
|
// Nothing
|
||||||
}
|
}
|
||||||
xhr.upload.addEventListener("progress", onProgress);
|
xhr.abort();
|
||||||
xhr.addEventListener('readystatechange', (ev) => {
|
reject(errorText ?? "An error occurred");
|
||||||
if (xhr.readyState === 4 && xhr.status >= 200 && xhr.status <= 299) {
|
|
||||||
console.log(`[Api] Publish successful (HTTP ${xhr.status})`, xhr.response);
|
|
||||||
resolve(xhr.response);
|
|
||||||
} else if (xhr.readyState === 4) {
|
|
||||||
// Firefox bug; see description above!
|
|
||||||
console.log(`[Api] Publish failed (HTTP ${xhr.status})`, xhr.responseText);
|
|
||||||
let errorText;
|
|
||||||
try {
|
|
||||||
const error = JSON.parse(xhr.responseText);
|
|
||||||
if (error.code && error.error) {
|
|
||||||
errorText = `Error ${error.code}: ${error.error}`;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// Nothing
|
|
||||||
}
|
|
||||||
xhr.abort();
|
|
||||||
reject(errorText ?? "An error occurred");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
xhr.send(body);
|
|
||||||
});
|
|
||||||
send.abort = () => {
|
|
||||||
console.log(`[Api] Publish aborted by user`);
|
|
||||||
xhr.abort();
|
|
||||||
}
|
}
|
||||||
return send;
|
});
|
||||||
}
|
xhr.send(body);
|
||||||
|
});
|
||||||
|
send.abort = () => {
|
||||||
|
console.log(`[Api] Publish aborted by user`);
|
||||||
|
xhr.abort();
|
||||||
|
};
|
||||||
|
return send;
|
||||||
|
}
|
||||||
|
|
||||||
async auth(baseUrl, topic, user) {
|
async auth(baseUrl, topic, user) {
|
||||||
const url = topicUrlAuth(baseUrl, topic);
|
const url = topicUrlAuth(baseUrl, topic);
|
||||||
console.log(`[Api] Checking auth for ${url}`);
|
console.log(`[Api] Checking auth for ${url}`);
|
||||||
const response = await fetch(url, {
|
const response = await fetch(url, {
|
||||||
headers: maybeWithBasicAuth({}, user)
|
headers: maybeWithBasicAuth({}, user),
|
||||||
});
|
});
|
||||||
if (response.status >= 200 && response.status <= 299) {
|
if (response.status >= 200 && response.status <= 299) {
|
||||||
return true;
|
return true;
|
||||||
} else if (!user && response.status === 404) {
|
} else if (!user && response.status === 404) {
|
||||||
return true; // Special case: Anonymous login to old servers return 404 since /<topic>/auth doesn't exist
|
return true; // Special case: Anonymous login to old servers return 404 since /<topic>/auth doesn't exist
|
||||||
} else if (response.status === 401 || response.status === 403) { // See server/server.go
|
} else if (response.status === 401 || response.status === 403) {
|
||||||
return false;
|
// See server/server.go
|
||||||
}
|
return false;
|
||||||
throw new Error(`Unexpected server response ${response.status}`);
|
|
||||||
}
|
}
|
||||||
|
throw new Error(`Unexpected server response ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
async userStats(baseUrl) {
|
async userStats(baseUrl) {
|
||||||
const url = userStatsUrl(baseUrl);
|
const url = userStatsUrl(baseUrl);
|
||||||
console.log(`[Api] Fetching user stats ${url}`);
|
console.log(`[Api] Fetching user stats ${url}`);
|
||||||
const response = await fetch(url);
|
const response = await fetch(url);
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
throw new Error(`Unexpected server response ${response.status}`);
|
throw new Error(`Unexpected server response ${response.status}`);
|
||||||
}
|
|
||||||
const stats = await response.json();
|
|
||||||
console.log(`[Api] Stats`, stats);
|
|
||||||
return stats;
|
|
||||||
}
|
}
|
||||||
|
const stats = await response.json();
|
||||||
|
console.log(`[Api] Stats`, stats);
|
||||||
|
return stats;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const api = new Api();
|
const api = new Api();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {basicAuth, encodeBase64Url, topicShortUrl, topicUrlWs} from "./utils";
|
import { basicAuth, encodeBase64Url, topicShortUrl, topicUrlWs } from "./utils";
|
||||||
|
|
||||||
const retryBackoffSeconds = [5, 10, 15, 20, 30];
|
const retryBackoffSeconds = [5, 10, 15, 20, 30];
|
||||||
|
|
||||||
|
@ -9,104 +9,138 @@ const retryBackoffSeconds = [5, 10, 15, 20, 30];
|
||||||
* Incoming messages and state changes are forwarded via listeners.
|
* Incoming messages and state changes are forwarded via listeners.
|
||||||
*/
|
*/
|
||||||
class Connection {
|
class Connection {
|
||||||
constructor(connectionId, subscriptionId, baseUrl, topic, user, since, onNotification, onStateChanged) {
|
constructor(
|
||||||
this.connectionId = connectionId;
|
connectionId,
|
||||||
this.subscriptionId = subscriptionId;
|
subscriptionId,
|
||||||
this.baseUrl = baseUrl;
|
baseUrl,
|
||||||
this.topic = topic;
|
topic,
|
||||||
this.user = user;
|
user,
|
||||||
this.since = since;
|
since,
|
||||||
this.shortUrl = topicShortUrl(baseUrl, topic);
|
onNotification,
|
||||||
this.onNotification = onNotification;
|
onStateChanged,
|
||||||
this.onStateChanged = onStateChanged;
|
) {
|
||||||
|
this.connectionId = connectionId;
|
||||||
|
this.subscriptionId = subscriptionId;
|
||||||
|
this.baseUrl = baseUrl;
|
||||||
|
this.topic = topic;
|
||||||
|
this.user = user;
|
||||||
|
this.since = since;
|
||||||
|
this.shortUrl = topicShortUrl(baseUrl, topic);
|
||||||
|
this.onNotification = onNotification;
|
||||||
|
this.onStateChanged = onStateChanged;
|
||||||
|
this.ws = null;
|
||||||
|
this.retryCount = 0;
|
||||||
|
this.retryTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
// Don't fetch old messages; we do that as a poll() when adding a subscription;
|
||||||
|
// we don't want to re-trigger the main view re-render potentially hundreds of times.
|
||||||
|
|
||||||
|
const wsUrl = this.wsUrl();
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Opening connection to ${wsUrl}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
this.ws = new WebSocket(wsUrl);
|
||||||
|
this.ws.onopen = (event) => {
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection established`,
|
||||||
|
event,
|
||||||
|
);
|
||||||
|
this.retryCount = 0;
|
||||||
|
this.onStateChanged(this.subscriptionId, ConnectionState.Connected);
|
||||||
|
};
|
||||||
|
this.ws.onmessage = (event) => {
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Message received from server: ${event.data}`,
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
const data = JSON.parse(event.data);
|
||||||
|
if (data.event === "open") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const relevantAndValid =
|
||||||
|
data.event === "message" &&
|
||||||
|
"id" in data &&
|
||||||
|
"time" in data &&
|
||||||
|
"message" in data;
|
||||||
|
if (!relevantAndValid) {
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Unexpected message. Ignoring.`,
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.since = data.id;
|
||||||
|
this.onNotification(this.subscriptionId, data);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Error handling message: ${e}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.ws.onclose = (event) => {
|
||||||
|
if (event.wasClean) {
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection closed cleanly, code=${event.code} reason=${event.reason}`,
|
||||||
|
);
|
||||||
this.ws = null;
|
this.ws = null;
|
||||||
this.retryCount = 0;
|
} else {
|
||||||
this.retryTimeout = null;
|
const retrySeconds =
|
||||||
|
retryBackoffSeconds[
|
||||||
|
Math.min(this.retryCount, retryBackoffSeconds.length - 1)
|
||||||
|
];
|
||||||
|
this.retryCount++;
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection died, retrying in ${retrySeconds} seconds`,
|
||||||
|
);
|
||||||
|
this.retryTimeout = setTimeout(() => this.start(), retrySeconds * 1000);
|
||||||
|
this.onStateChanged(this.subscriptionId, ConnectionState.Connecting);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.ws.onerror = (event) => {
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Error occurred: ${event}`,
|
||||||
|
event,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
console.log(
|
||||||
|
`[Connection, ${this.shortUrl}, ${this.connectionId}] Closing connection`,
|
||||||
|
);
|
||||||
|
const socket = this.ws;
|
||||||
|
const retryTimeout = this.retryTimeout;
|
||||||
|
if (socket !== null) {
|
||||||
|
socket.close();
|
||||||
}
|
}
|
||||||
|
if (retryTimeout !== null) {
|
||||||
start() {
|
clearTimeout(retryTimeout);
|
||||||
// Don't fetch old messages; we do that as a poll() when adding a subscription;
|
|
||||||
// we don't want to re-trigger the main view re-render potentially hundreds of times.
|
|
||||||
|
|
||||||
const wsUrl = this.wsUrl();
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Opening connection to ${wsUrl}`);
|
|
||||||
|
|
||||||
this.ws = new WebSocket(wsUrl);
|
|
||||||
this.ws.onopen = (event) => {
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection established`, event);
|
|
||||||
this.retryCount = 0;
|
|
||||||
this.onStateChanged(this.subscriptionId, ConnectionState.Connected);
|
|
||||||
}
|
|
||||||
this.ws.onmessage = (event) => {
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Message received from server: ${event.data}`);
|
|
||||||
try {
|
|
||||||
const data = JSON.parse(event.data);
|
|
||||||
if (data.event === 'open') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const relevantAndValid =
|
|
||||||
data.event === 'message' &&
|
|
||||||
'id' in data &&
|
|
||||||
'time' in data &&
|
|
||||||
'message' in data;
|
|
||||||
if (!relevantAndValid) {
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Unexpected message. Ignoring.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.since = data.id;
|
|
||||||
this.onNotification(this.subscriptionId, data);
|
|
||||||
} catch (e) {
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Error handling message: ${e}`);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
this.ws.onclose = (event) => {
|
|
||||||
if (event.wasClean) {
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
|
|
||||||
this.ws = null;
|
|
||||||
} else {
|
|
||||||
const retrySeconds = retryBackoffSeconds[Math.min(this.retryCount, retryBackoffSeconds.length-1)];
|
|
||||||
this.retryCount++;
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Connection died, retrying in ${retrySeconds} seconds`);
|
|
||||||
this.retryTimeout = setTimeout(() => this.start(), retrySeconds * 1000);
|
|
||||||
this.onStateChanged(this.subscriptionId, ConnectionState.Connecting);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
this.ws.onerror = (event) => {
|
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Error occurred: ${event}`, event);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
this.retryTimeout = null;
|
||||||
|
this.ws = null;
|
||||||
|
}
|
||||||
|
|
||||||
close() {
|
wsUrl() {
|
||||||
console.log(`[Connection, ${this.shortUrl}, ${this.connectionId}] Closing connection`);
|
const params = [];
|
||||||
const socket = this.ws;
|
if (this.since) {
|
||||||
const retryTimeout = this.retryTimeout;
|
params.push(`since=${this.since}`);
|
||||||
if (socket !== null) {
|
|
||||||
socket.close();
|
|
||||||
}
|
|
||||||
if (retryTimeout !== null) {
|
|
||||||
clearTimeout(retryTimeout);
|
|
||||||
}
|
|
||||||
this.retryTimeout = null;
|
|
||||||
this.ws = null;
|
|
||||||
}
|
}
|
||||||
|
if (this.user) {
|
||||||
wsUrl() {
|
const auth = encodeBase64Url(
|
||||||
const params = [];
|
basicAuth(this.user.username, this.user.password),
|
||||||
if (this.since) {
|
);
|
||||||
params.push(`since=${this.since}`);
|
params.push(`auth=${auth}`);
|
||||||
}
|
|
||||||
if (this.user) {
|
|
||||||
const auth = encodeBase64Url(basicAuth(this.user.username, this.user.password));
|
|
||||||
params.push(`auth=${auth}`);
|
|
||||||
}
|
|
||||||
const wsUrl = topicUrlWs(this.baseUrl, this.topic);
|
|
||||||
return (params.length === 0) ? wsUrl : `${wsUrl}?${params.join('&')}`;
|
|
||||||
}
|
}
|
||||||
|
const wsUrl = topicUrlWs(this.baseUrl, this.topic);
|
||||||
|
return params.length === 0 ? wsUrl : `${wsUrl}?${params.join("&")}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ConnectionState {
|
export class ConnectionState {
|
||||||
static Connected = "connected";
|
static Connected = "connected";
|
||||||
static Connecting = "connecting";
|
static Connecting = "connecting";
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Connection;
|
export default Connection;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import Connection from "./Connection";
|
import Connection from "./Connection";
|
||||||
import {hashCode} from "./utils";
|
import { hashCode } from "./utils";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection manager keeps track of active connections (WebSocket connections, see Connection).
|
* The connection manager keeps track of active connections (WebSocket connections, see Connection).
|
||||||
|
@ -8,110 +8,126 @@ import {hashCode} from "./utils";
|
||||||
* as required. This is done pretty much exactly the same way as in the Android app.
|
* as required. This is done pretty much exactly the same way as in the Android app.
|
||||||
*/
|
*/
|
||||||
class ConnectionManager {
|
class ConnectionManager {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.connections = new Map(); // ConnectionId -> Connection (hash, see below)
|
this.connections = new Map(); // ConnectionId -> Connection (hash, see below)
|
||||||
this.stateListener = null; // Fired when connection state changes
|
this.stateListener = null; // Fired when connection state changes
|
||||||
this.notificationListener = null; // Fired when new notifications arrive
|
this.notificationListener = null; // Fired when new notifications arrive
|
||||||
|
}
|
||||||
|
|
||||||
|
registerStateListener(listener) {
|
||||||
|
this.stateListener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
resetStateListener() {
|
||||||
|
this.stateListener = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
registerNotificationListener(listener) {
|
||||||
|
this.notificationListener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
resetNotificationListener() {
|
||||||
|
this.notificationListener = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function figures out which websocket connections should be running by comparing the
|
||||||
|
* current state of the world (connections) with the target state (targetIds).
|
||||||
|
*
|
||||||
|
* It uses a "connectionId", which is sha256($subscriptionId|$username|$password) to identify
|
||||||
|
* connections. If any of them change, the connection is closed/replaced.
|
||||||
|
*/
|
||||||
|
async refresh(subscriptions, users) {
|
||||||
|
if (!subscriptions || !users) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
console.log(`[ConnectionManager] Refreshing connections`);
|
||||||
|
const subscriptionsWithUsersAndConnectionId = await Promise.all(
|
||||||
|
subscriptions.map(async (s) => {
|
||||||
|
const [user] = users.filter((u) => u.baseUrl === s.baseUrl);
|
||||||
|
const connectionId = await makeConnectionId(s, user);
|
||||||
|
return { ...s, user, connectionId };
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
const targetIds = subscriptionsWithUsersAndConnectionId.map(
|
||||||
|
(s) => s.connectionId,
|
||||||
|
);
|
||||||
|
const deletedIds = Array.from(this.connections.keys()).filter(
|
||||||
|
(id) => !targetIds.includes(id),
|
||||||
|
);
|
||||||
|
|
||||||
registerStateListener(listener) {
|
// Create and add new connections
|
||||||
this.stateListener = listener;
|
subscriptionsWithUsersAndConnectionId.forEach((subscription) => {
|
||||||
|
const subscriptionId = subscription.id;
|
||||||
|
const connectionId = subscription.connectionId;
|
||||||
|
const added = !this.connections.get(connectionId);
|
||||||
|
if (added) {
|
||||||
|
const baseUrl = subscription.baseUrl;
|
||||||
|
const topic = subscription.topic;
|
||||||
|
const user = subscription.user;
|
||||||
|
const since = subscription.last;
|
||||||
|
const connection = new Connection(
|
||||||
|
connectionId,
|
||||||
|
subscriptionId,
|
||||||
|
baseUrl,
|
||||||
|
topic,
|
||||||
|
user,
|
||||||
|
since,
|
||||||
|
(subscriptionId, notification) =>
|
||||||
|
this.notificationReceived(subscriptionId, notification),
|
||||||
|
(subscriptionId, state) => this.stateChanged(subscriptionId, state),
|
||||||
|
);
|
||||||
|
this.connections.set(connectionId, connection);
|
||||||
|
console.log(
|
||||||
|
`[ConnectionManager] Starting new connection ${connectionId} (subscription ${subscriptionId} with user ${
|
||||||
|
user ? user.username : "anonymous"
|
||||||
|
})`,
|
||||||
|
);
|
||||||
|
connection.start();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Delete old connections
|
||||||
|
deletedIds.forEach((id) => {
|
||||||
|
console.log(`[ConnectionManager] Closing connection ${id}`);
|
||||||
|
const connection = this.connections.get(id);
|
||||||
|
this.connections.delete(id);
|
||||||
|
connection.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
stateChanged(subscriptionId, state) {
|
||||||
|
if (this.stateListener) {
|
||||||
|
try {
|
||||||
|
this.stateListener(subscriptionId, state);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(
|
||||||
|
`[ConnectionManager] Error updating state of ${subscriptionId} to ${state}`,
|
||||||
|
e,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
resetStateListener() {
|
notificationReceived(subscriptionId, notification) {
|
||||||
this.stateListener = null;
|
if (this.notificationListener) {
|
||||||
}
|
try {
|
||||||
|
this.notificationListener(subscriptionId, notification);
|
||||||
registerNotificationListener(listener) {
|
} catch (e) {
|
||||||
this.notificationListener = listener;
|
console.error(
|
||||||
}
|
`[ConnectionManager] Error handling notification for ${subscriptionId}`,
|
||||||
|
e,
|
||||||
resetNotificationListener() {
|
);
|
||||||
this.notificationListener = null;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function figures out which websocket connections should be running by comparing the
|
|
||||||
* current state of the world (connections) with the target state (targetIds).
|
|
||||||
*
|
|
||||||
* It uses a "connectionId", which is sha256($subscriptionId|$username|$password) to identify
|
|
||||||
* connections. If any of them change, the connection is closed/replaced.
|
|
||||||
*/
|
|
||||||
async refresh(subscriptions, users) {
|
|
||||||
if (!subscriptions || !users) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log(`[ConnectionManager] Refreshing connections`);
|
|
||||||
const subscriptionsWithUsersAndConnectionId = await Promise.all(subscriptions
|
|
||||||
.map(async s => {
|
|
||||||
const [user] = users.filter(u => u.baseUrl === s.baseUrl);
|
|
||||||
const connectionId = await makeConnectionId(s, user);
|
|
||||||
return {...s, user, connectionId};
|
|
||||||
}));
|
|
||||||
const targetIds = subscriptionsWithUsersAndConnectionId.map(s => s.connectionId);
|
|
||||||
const deletedIds = Array.from(this.connections.keys()).filter(id => !targetIds.includes(id));
|
|
||||||
|
|
||||||
// Create and add new connections
|
|
||||||
subscriptionsWithUsersAndConnectionId.forEach(subscription => {
|
|
||||||
const subscriptionId = subscription.id;
|
|
||||||
const connectionId = subscription.connectionId;
|
|
||||||
const added = !this.connections.get(connectionId)
|
|
||||||
if (added) {
|
|
||||||
const baseUrl = subscription.baseUrl;
|
|
||||||
const topic = subscription.topic;
|
|
||||||
const user = subscription.user;
|
|
||||||
const since = subscription.last;
|
|
||||||
const connection = new Connection(
|
|
||||||
connectionId,
|
|
||||||
subscriptionId,
|
|
||||||
baseUrl,
|
|
||||||
topic,
|
|
||||||
user,
|
|
||||||
since,
|
|
||||||
(subscriptionId, notification) => this.notificationReceived(subscriptionId, notification),
|
|
||||||
(subscriptionId, state) => this.stateChanged(subscriptionId, state)
|
|
||||||
);
|
|
||||||
this.connections.set(connectionId, connection);
|
|
||||||
console.log(`[ConnectionManager] Starting new connection ${connectionId} (subscription ${subscriptionId} with user ${user ? user.username : "anonymous"})`);
|
|
||||||
connection.start();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Delete old connections
|
|
||||||
deletedIds.forEach(id => {
|
|
||||||
console.log(`[ConnectionManager] Closing connection ${id}`);
|
|
||||||
const connection = this.connections.get(id);
|
|
||||||
this.connections.delete(id);
|
|
||||||
connection.close();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
stateChanged(subscriptionId, state) {
|
|
||||||
if (this.stateListener) {
|
|
||||||
try {
|
|
||||||
this.stateListener(subscriptionId, state);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`[ConnectionManager] Error updating state of ${subscriptionId} to ${state}`, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
notificationReceived(subscriptionId, notification) {
|
|
||||||
if (this.notificationListener) {
|
|
||||||
try {
|
|
||||||
this.notificationListener(subscriptionId, notification);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`[ConnectionManager] Error handling notification for ${subscriptionId}`, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const makeConnectionId = async (subscription, user) => {
|
const makeConnectionId = async (subscription, user) => {
|
||||||
return (user)
|
return user
|
||||||
? hashCode(`${subscription.id}|${user.username}|${user.password}`)
|
? hashCode(`${subscription.id}|${user.username}|${user.password}`)
|
||||||
: hashCode(`${subscription.id}`);
|
: hashCode(`${subscription.id}`);
|
||||||
}
|
};
|
||||||
|
|
||||||
const connectionManager = new ConnectionManager();
|
const connectionManager = new ConnectionManager();
|
||||||
export default connectionManager;
|
export default connectionManager;
|
||||||
|
|
|
@ -1,4 +1,11 @@
|
||||||
import {formatMessage, formatTitleWithDefault, openUrl, playSound, topicDisplayName, topicShortUrl} from "./utils";
|
import {
|
||||||
|
formatMessage,
|
||||||
|
formatTitleWithDefault,
|
||||||
|
openUrl,
|
||||||
|
playSound,
|
||||||
|
topicDisplayName,
|
||||||
|
topicShortUrl,
|
||||||
|
} from "./utils";
|
||||||
import prefs from "./Prefs";
|
import prefs from "./Prefs";
|
||||||
import subscriptionManager from "./SubscriptionManager";
|
import subscriptionManager from "./SubscriptionManager";
|
||||||
import logo from "../img/ntfy.png";
|
import logo from "../img/ntfy.png";
|
||||||
|
@ -8,89 +15,93 @@ import logo from "../img/ntfy.png";
|
||||||
* support this; most importantly, all iOS browsers do not support window.Notification.
|
* support this; most importantly, all iOS browsers do not support window.Notification.
|
||||||
*/
|
*/
|
||||||
class Notifier {
|
class Notifier {
|
||||||
async notify(subscriptionId, notification, onClickFallback) {
|
async notify(subscriptionId, notification, onClickFallback) {
|
||||||
if (!this.supported()) {
|
if (!this.supported()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const subscription = await subscriptionManager.get(subscriptionId);
|
const subscription = await subscriptionManager.get(subscriptionId);
|
||||||
const shouldNotify = await this.shouldNotify(subscription, notification);
|
const shouldNotify = await this.shouldNotify(subscription, notification);
|
||||||
if (!shouldNotify) {
|
if (!shouldNotify) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const shortUrl = topicShortUrl(subscription.baseUrl, subscription.topic);
|
const shortUrl = topicShortUrl(subscription.baseUrl, subscription.topic);
|
||||||
const displayName = topicDisplayName(subscription);
|
const displayName = topicDisplayName(subscription);
|
||||||
const message = formatMessage(notification);
|
const message = formatMessage(notification);
|
||||||
const title = formatTitleWithDefault(notification, displayName);
|
const title = formatTitleWithDefault(notification, displayName);
|
||||||
|
|
||||||
// Show notification
|
// Show notification
|
||||||
console.log(`[Notifier, ${shortUrl}] Displaying notification ${notification.id}: ${message}`);
|
console.log(
|
||||||
const n = new Notification(title, {
|
`[Notifier, ${shortUrl}] Displaying notification ${notification.id}: ${message}`,
|
||||||
body: message,
|
);
|
||||||
icon: logo
|
const n = new Notification(title, {
|
||||||
});
|
body: message,
|
||||||
if (notification.click) {
|
icon: logo,
|
||||||
n.onclick = (e) => openUrl(notification.click);
|
});
|
||||||
} else {
|
if (notification.click) {
|
||||||
n.onclick = () => onClickFallback(subscription);
|
n.onclick = (e) => openUrl(notification.click);
|
||||||
}
|
} else {
|
||||||
|
n.onclick = () => onClickFallback(subscription);
|
||||||
// Play sound
|
|
||||||
const sound = await prefs.sound();
|
|
||||||
if (sound && sound !== "none") {
|
|
||||||
try {
|
|
||||||
await playSound(sound);
|
|
||||||
} catch (e) {
|
|
||||||
console.log(`[Notifier, ${shortUrl}] Error playing audio`, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
granted() {
|
// Play sound
|
||||||
return this.supported() && Notification.permission === 'granted';
|
const sound = await prefs.sound();
|
||||||
|
if (sound && sound !== "none") {
|
||||||
|
try {
|
||||||
|
await playSound(sound);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`[Notifier, ${shortUrl}] Error playing audio`, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
maybeRequestPermission(cb) {
|
granted() {
|
||||||
if (!this.supported()) {
|
return this.supported() && Notification.permission === "granted";
|
||||||
cb(false);
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!this.granted()) {
|
|
||||||
Notification.requestPermission().then((permission) => {
|
|
||||||
const granted = permission === 'granted';
|
|
||||||
cb(granted);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async shouldNotify(subscription, notification) {
|
maybeRequestPermission(cb) {
|
||||||
if (subscription.mutedUntil === 1) {
|
if (!this.supported()) {
|
||||||
return false;
|
cb(false);
|
||||||
}
|
return;
|
||||||
const priority = (notification.priority) ? notification.priority : 3;
|
|
||||||
const minPriority = await prefs.minPriority();
|
|
||||||
if (priority < minPriority) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
if (!this.granted()) {
|
||||||
|
Notification.requestPermission().then((permission) => {
|
||||||
|
const granted = permission === "granted";
|
||||||
|
cb(granted);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
supported() {
|
async shouldNotify(subscription, notification) {
|
||||||
return this.browserSupported() && this.contextSupported();
|
if (subscription.mutedUntil === 1) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
const priority = notification.priority ? notification.priority : 3;
|
||||||
|
const minPriority = await prefs.minPriority();
|
||||||
|
if (priority < minPriority) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
browserSupported() {
|
supported() {
|
||||||
return 'Notification' in window;
|
return this.browserSupported() && this.contextSupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
browserSupported() {
|
||||||
* Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API
|
return "Notification" in window;
|
||||||
* is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification
|
}
|
||||||
*/
|
|
||||||
contextSupported() {
|
/**
|
||||||
return location.protocol === 'https:'
|
* Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API
|
||||||
|| location.hostname.match('^127.')
|
* is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification
|
||||||
|| location.hostname === 'localhost';
|
*/
|
||||||
}
|
contextSupported() {
|
||||||
|
return (
|
||||||
|
location.protocol === "https:" ||
|
||||||
|
location.hostname.match("^127.") ||
|
||||||
|
location.hostname === "localhost"
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const notifier = new Notifier();
|
const notifier = new Notifier();
|
||||||
|
|
|
@ -5,54 +5,60 @@ const delayMillis = 8000; // 8 seconds
|
||||||
const intervalMillis = 300000; // 5 minutes
|
const intervalMillis = 300000; // 5 minutes
|
||||||
|
|
||||||
class Poller {
|
class Poller {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.timer = null;
|
this.timer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
startWorker() {
|
startWorker() {
|
||||||
if (this.timer !== null) {
|
if (this.timer !== null) {
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
console.log(`[Poller] Starting worker`);
|
|
||||||
this.timer = setInterval(() => this.pollAll(), intervalMillis);
|
|
||||||
setTimeout(() => this.pollAll(), delayMillis);
|
|
||||||
}
|
}
|
||||||
|
console.log(`[Poller] Starting worker`);
|
||||||
|
this.timer = setInterval(() => this.pollAll(), intervalMillis);
|
||||||
|
setTimeout(() => this.pollAll(), delayMillis);
|
||||||
|
}
|
||||||
|
|
||||||
async pollAll() {
|
async pollAll() {
|
||||||
console.log(`[Poller] Polling all subscriptions`);
|
console.log(`[Poller] Polling all subscriptions`);
|
||||||
const subscriptions = await subscriptionManager.all();
|
const subscriptions = await subscriptionManager.all();
|
||||||
for (const s of subscriptions) {
|
for (const s of subscriptions) {
|
||||||
try {
|
try {
|
||||||
await this.poll(s);
|
await this.poll(s);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(`[Poller] Error polling ${s.id}`, e);
|
console.log(`[Poller] Error polling ${s.id}`, e);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async poll(subscription) {
|
async poll(subscription) {
|
||||||
console.log(`[Poller] Polling ${subscription.id}`);
|
console.log(`[Poller] Polling ${subscription.id}`);
|
||||||
|
|
||||||
const since = subscription.last;
|
const since = subscription.last;
|
||||||
const notifications = await api.poll(subscription.baseUrl, subscription.topic, since);
|
const notifications = await api.poll(
|
||||||
if (!notifications || notifications.length === 0) {
|
subscription.baseUrl,
|
||||||
console.log(`[Poller] No new notifications found for ${subscription.id}`);
|
subscription.topic,
|
||||||
return;
|
since,
|
||||||
}
|
);
|
||||||
console.log(`[Poller] Adding ${notifications.length} notification(s) for ${subscription.id}`);
|
if (!notifications || notifications.length === 0) {
|
||||||
await subscriptionManager.addNotifications(subscription.id, notifications);
|
console.log(`[Poller] No new notifications found for ${subscription.id}`);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
console.log(
|
||||||
|
`[Poller] Adding ${notifications.length} notification(s) for ${subscription.id}`,
|
||||||
|
);
|
||||||
|
await subscriptionManager.addNotifications(subscription.id, notifications);
|
||||||
|
}
|
||||||
|
|
||||||
pollInBackground(subscription) {
|
pollInBackground(subscription) {
|
||||||
const fn = async () => {
|
const fn = async () => {
|
||||||
try {
|
try {
|
||||||
await this.poll(subscription);
|
await this.poll(subscription);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(`[App] Error polling subscription ${subscription.id}`, e);
|
console.error(`[App] Error polling subscription ${subscription.id}`, e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
setTimeout(() => fn(), 0);
|
setTimeout(() => fn(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const poller = new Poller();
|
const poller = new Poller();
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
import db from "./db";
|
import db from "./db";
|
||||||
|
|
||||||
class Prefs {
|
class Prefs {
|
||||||
async setSound(sound) {
|
async setSound(sound) {
|
||||||
db.prefs.put({key: 'sound', value: sound.toString()});
|
db.prefs.put({ key: "sound", value: sound.toString() });
|
||||||
}
|
}
|
||||||
|
|
||||||
async sound() {
|
async sound() {
|
||||||
const sound = await db.prefs.get('sound');
|
const sound = await db.prefs.get("sound");
|
||||||
return (sound) ? sound.value : "ding";
|
return sound ? sound.value : "ding";
|
||||||
}
|
}
|
||||||
|
|
||||||
async setMinPriority(minPriority) {
|
async setMinPriority(minPriority) {
|
||||||
db.prefs.put({key: 'minPriority', value: minPriority.toString()});
|
db.prefs.put({ key: "minPriority", value: minPriority.toString() });
|
||||||
}
|
}
|
||||||
|
|
||||||
async minPriority() {
|
async minPriority() {
|
||||||
const minPriority = await db.prefs.get('minPriority');
|
const minPriority = await db.prefs.get("minPriority");
|
||||||
return (minPriority) ? Number(minPriority.value) : 1;
|
return minPriority ? Number(minPriority.value) : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
async setDeleteAfter(deleteAfter) {
|
async setDeleteAfter(deleteAfter) {
|
||||||
db.prefs.put({key:'deleteAfter', value: deleteAfter.toString()});
|
db.prefs.put({ key: "deleteAfter", value: deleteAfter.toString() });
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteAfter() {
|
async deleteAfter() {
|
||||||
const deleteAfter = await db.prefs.get('deleteAfter');
|
const deleteAfter = await db.prefs.get("deleteAfter");
|
||||||
return (deleteAfter) ? Number(deleteAfter.value) : 604800; // Default is one week
|
return deleteAfter ? Number(deleteAfter.value) : 604800; // Default is one week
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const prefs = new Prefs();
|
const prefs = new Prefs();
|
||||||
|
|
|
@ -5,33 +5,36 @@ const delayMillis = 25000; // 25 seconds
|
||||||
const intervalMillis = 1800000; // 30 minutes
|
const intervalMillis = 1800000; // 30 minutes
|
||||||
|
|
||||||
class Pruner {
|
class Pruner {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.timer = null;
|
this.timer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
startWorker() {
|
startWorker() {
|
||||||
if (this.timer !== null) {
|
if (this.timer !== null) {
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
console.log(`[Pruner] Starting worker`);
|
|
||||||
this.timer = setInterval(() => this.prune(), intervalMillis);
|
|
||||||
setTimeout(() => this.prune(), delayMillis);
|
|
||||||
}
|
}
|
||||||
|
console.log(`[Pruner] Starting worker`);
|
||||||
|
this.timer = setInterval(() => this.prune(), intervalMillis);
|
||||||
|
setTimeout(() => this.prune(), delayMillis);
|
||||||
|
}
|
||||||
|
|
||||||
async prune() {
|
async prune() {
|
||||||
const deleteAfterSeconds = await prefs.deleteAfter();
|
const deleteAfterSeconds = await prefs.deleteAfter();
|
||||||
const pruneThresholdTimestamp = Math.round(Date.now()/1000) - deleteAfterSeconds;
|
const pruneThresholdTimestamp =
|
||||||
if (deleteAfterSeconds === 0) {
|
Math.round(Date.now() / 1000) - deleteAfterSeconds;
|
||||||
console.log(`[Pruner] Pruning is disabled. Skipping.`);
|
if (deleteAfterSeconds === 0) {
|
||||||
return;
|
console.log(`[Pruner] Pruning is disabled. Skipping.`);
|
||||||
}
|
return;
|
||||||
console.log(`[Pruner] Pruning notifications older than ${deleteAfterSeconds}s (timestamp ${pruneThresholdTimestamp})`);
|
|
||||||
try {
|
|
||||||
await subscriptionManager.pruneNotifications(pruneThresholdTimestamp);
|
|
||||||
} catch (e) {
|
|
||||||
console.log(`[Pruner] Error pruning old subscriptions`, e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
console.log(
|
||||||
|
`[Pruner] Pruning notifications older than ${deleteAfterSeconds}s (timestamp ${pruneThresholdTimestamp})`,
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
await subscriptionManager.pruneNotifications(pruneThresholdTimestamp);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`[Pruner] Error pruning old subscriptions`, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const pruner = new Pruner();
|
const pruner = new Pruner();
|
||||||
|
|
|
@ -1,149 +1,144 @@
|
||||||
import db from "./db";
|
import db from "./db";
|
||||||
import {topicUrl} from "./utils";
|
import { topicUrl } from "./utils";
|
||||||
|
|
||||||
class SubscriptionManager {
|
class SubscriptionManager {
|
||||||
/** All subscriptions, including "new count"; this is a JOIN, see https://dexie.org/docs/API-Reference#joining */
|
/** All subscriptions, including "new count"; this is a JOIN, see https://dexie.org/docs/API-Reference#joining */
|
||||||
async all() {
|
async all() {
|
||||||
const subscriptions = await db.subscriptions.toArray();
|
const subscriptions = await db.subscriptions.toArray();
|
||||||
await Promise.all(subscriptions.map(async s => {
|
await Promise.all(
|
||||||
s.new = await db.notifications
|
subscriptions.map(async (s) => {
|
||||||
.where({ subscriptionId: s.id, new: 1 })
|
s.new = await db.notifications
|
||||||
.count();
|
.where({ subscriptionId: s.id, new: 1 })
|
||||||
}));
|
.count();
|
||||||
return subscriptions;
|
}),
|
||||||
}
|
);
|
||||||
|
return subscriptions;
|
||||||
|
}
|
||||||
|
|
||||||
async get(subscriptionId) {
|
async get(subscriptionId) {
|
||||||
return await db.subscriptions.get(subscriptionId)
|
return await db.subscriptions.get(subscriptionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async add(baseUrl, topic) {
|
async add(baseUrl, topic) {
|
||||||
const subscription = {
|
const subscription = {
|
||||||
id: topicUrl(baseUrl, topic),
|
id: topicUrl(baseUrl, topic),
|
||||||
baseUrl: baseUrl,
|
baseUrl: baseUrl,
|
||||||
topic: topic,
|
topic: topic,
|
||||||
mutedUntil: 0,
|
mutedUntil: 0,
|
||||||
last: null
|
last: null,
|
||||||
};
|
};
|
||||||
await db.subscriptions.put(subscription);
|
await db.subscriptions.put(subscription);
|
||||||
return subscription;
|
return subscription;
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateState(subscriptionId, state) {
|
async updateState(subscriptionId, state) {
|
||||||
db.subscriptions.update(subscriptionId, { state: state });
|
db.subscriptions.update(subscriptionId, { state: state });
|
||||||
}
|
}
|
||||||
|
|
||||||
async remove(subscriptionId) {
|
async remove(subscriptionId) {
|
||||||
await db.subscriptions.delete(subscriptionId);
|
await db.subscriptions.delete(subscriptionId);
|
||||||
await db.notifications
|
await db.notifications.where({ subscriptionId: subscriptionId }).delete();
|
||||||
.where({subscriptionId: subscriptionId})
|
}
|
||||||
.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
async first() {
|
async first() {
|
||||||
return db.subscriptions.toCollection().first(); // May be undefined
|
return db.subscriptions.toCollection().first(); // May be undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
async getNotifications(subscriptionId) {
|
async getNotifications(subscriptionId) {
|
||||||
// This is quite awkward, but it is the recommended approach as per the Dexie docs.
|
// This is quite awkward, but it is the recommended approach as per the Dexie docs.
|
||||||
// It's actually fine, because the reading and filtering is quite fast. The rendering is what's
|
// It's actually fine, because the reading and filtering is quite fast. The rendering is what's
|
||||||
// killing performance. See https://dexie.org/docs/Collection/Collection.offset()#a-better-paging-approach
|
// killing performance. See https://dexie.org/docs/Collection/Collection.offset()#a-better-paging-approach
|
||||||
|
|
||||||
return db.notifications
|
return db.notifications
|
||||||
.orderBy("time") // Sort by time first
|
.orderBy("time") // Sort by time first
|
||||||
.filter(n => n.subscriptionId === subscriptionId)
|
.filter((n) => n.subscriptionId === subscriptionId)
|
||||||
.reverse()
|
.reverse()
|
||||||
.toArray();
|
.toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAllNotifications() {
|
async getAllNotifications() {
|
||||||
return db.notifications
|
return db.notifications
|
||||||
.orderBy("time") // Efficient, see docs
|
.orderBy("time") // Efficient, see docs
|
||||||
.reverse()
|
.reverse()
|
||||||
.toArray();
|
.toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds notification, or returns false if it already exists */
|
/** Adds notification, or returns false if it already exists */
|
||||||
async addNotification(subscriptionId, notification) {
|
async addNotification(subscriptionId, notification) {
|
||||||
const exists = await db.notifications.get(notification.id);
|
const exists = await db.notifications.get(notification.id);
|
||||||
if (exists) {
|
if (exists) {
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
try {
|
|
||||||
notification.new = 1; // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation
|
|
||||||
await db.notifications.add({ ...notification, subscriptionId }); // FIXME consider put() for double tab
|
|
||||||
await db.subscriptions.update(subscriptionId, {
|
|
||||||
last: notification.id
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`[SubscriptionManager] Error adding notification`, e);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
notification.new = 1; // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation
|
||||||
|
await db.notifications.add({ ...notification, subscriptionId }); // FIXME consider put() for double tab
|
||||||
|
await db.subscriptions.update(subscriptionId, {
|
||||||
|
last: notification.id,
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`[SubscriptionManager] Error adding notification`, e);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/** Adds/replaces notifications, will not throw if they exist */
|
/** Adds/replaces notifications, will not throw if they exist */
|
||||||
async addNotifications(subscriptionId, notifications) {
|
async addNotifications(subscriptionId, notifications) {
|
||||||
const notificationsWithSubscriptionId = notifications
|
const notificationsWithSubscriptionId = notifications.map(
|
||||||
.map(notification => ({ ...notification, subscriptionId }));
|
(notification) => ({ ...notification, subscriptionId }),
|
||||||
const lastNotificationId = notifications.at(-1).id;
|
);
|
||||||
await db.notifications.bulkPut(notificationsWithSubscriptionId);
|
const lastNotificationId = notifications.at(-1).id;
|
||||||
await db.subscriptions.update(subscriptionId, {
|
await db.notifications.bulkPut(notificationsWithSubscriptionId);
|
||||||
last: lastNotificationId
|
await db.subscriptions.update(subscriptionId, {
|
||||||
});
|
last: lastNotificationId,
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async updateNotification(notification) {
|
async updateNotification(notification) {
|
||||||
const exists = await db.notifications.get(notification.id);
|
const exists = await db.notifications.get(notification.id);
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
try {
|
|
||||||
await db.notifications.put({ ...notification });
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`[SubscriptionManager] Error updating notification`, e);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
await db.notifications.put({ ...notification });
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`[SubscriptionManager] Error updating notification`, e);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
async deleteNotification(notificationId) {
|
async deleteNotification(notificationId) {
|
||||||
await db.notifications.delete(notificationId);
|
await db.notifications.delete(notificationId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteNotifications(subscriptionId) {
|
async deleteNotifications(subscriptionId) {
|
||||||
await db.notifications
|
await db.notifications.where({ subscriptionId: subscriptionId }).delete();
|
||||||
.where({subscriptionId: subscriptionId})
|
}
|
||||||
.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
async markNotificationRead(notificationId) {
|
async markNotificationRead(notificationId) {
|
||||||
await db.notifications
|
await db.notifications.where({ id: notificationId }).modify({ new: 0 });
|
||||||
.where({id: notificationId})
|
}
|
||||||
.modify({new: 0});
|
|
||||||
}
|
|
||||||
|
|
||||||
async markNotificationsRead(subscriptionId) {
|
async markNotificationsRead(subscriptionId) {
|
||||||
await db.notifications
|
await db.notifications
|
||||||
.where({subscriptionId: subscriptionId, new: 1})
|
.where({ subscriptionId: subscriptionId, new: 1 })
|
||||||
.modify({new: 0});
|
.modify({ new: 0 });
|
||||||
}
|
}
|
||||||
|
|
||||||
async setMutedUntil(subscriptionId, mutedUntil) {
|
async setMutedUntil(subscriptionId, mutedUntil) {
|
||||||
await db.subscriptions.update(subscriptionId, {
|
await db.subscriptions.update(subscriptionId, {
|
||||||
mutedUntil: mutedUntil
|
mutedUntil: mutedUntil,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async setDisplayName(subscriptionId, displayName) {
|
async setDisplayName(subscriptionId, displayName) {
|
||||||
await db.subscriptions.update(subscriptionId, {
|
await db.subscriptions.update(subscriptionId, {
|
||||||
displayName: displayName
|
displayName: displayName,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async pruneNotifications(thresholdTimestamp) {
|
async pruneNotifications(thresholdTimestamp) {
|
||||||
await db.notifications
|
await db.notifications.where("time").below(thresholdTimestamp).delete();
|
||||||
.where("time").below(thresholdTimestamp)
|
}
|
||||||
.delete();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const subscriptionManager = new SubscriptionManager();
|
const subscriptionManager = new SubscriptionManager();
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
import db from "./db";
|
import db from "./db";
|
||||||
|
|
||||||
class UserManager {
|
class UserManager {
|
||||||
async all() {
|
async all() {
|
||||||
return db.users.toArray();
|
return db.users.toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
async get(baseUrl) {
|
async get(baseUrl) {
|
||||||
return db.users.get(baseUrl);
|
return db.users.get(baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
async save(user) {
|
async save(user) {
|
||||||
await db.users.put(user);
|
await db.users.put(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
async delete(baseUrl) {
|
async delete(baseUrl) {
|
||||||
await db.users.delete(baseUrl);
|
await db.users.delete(baseUrl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const userManager = new UserManager();
|
const userManager = new UserManager();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import Dexie from 'dexie';
|
import Dexie from "dexie";
|
||||||
|
|
||||||
// Uses Dexie.js
|
// Uses Dexie.js
|
||||||
// https://dexie.org/docs/API-Reference#quick-reference
|
// https://dexie.org/docs/API-Reference#quick-reference
|
||||||
|
@ -6,13 +6,13 @@ import Dexie from 'dexie';
|
||||||
// Notes:
|
// Notes:
|
||||||
// - As per docs, we only declare the indexable columns, not all columns
|
// - As per docs, we only declare the indexable columns, not all columns
|
||||||
|
|
||||||
const db = new Dexie('ntfy');
|
const db = new Dexie("ntfy");
|
||||||
|
|
||||||
db.version(1).stores({
|
db.version(1).stores({
|
||||||
subscriptions: '&id,baseUrl',
|
subscriptions: "&id,baseUrl",
|
||||||
notifications: '&id,subscriptionId,time,new,[subscriptionId+new]', // compound key for query performance
|
notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance
|
||||||
users: '&baseUrl,username',
|
users: "&baseUrl,username",
|
||||||
prefs: '&key'
|
prefs: "&key",
|
||||||
});
|
});
|
||||||
|
|
||||||
export default db;
|
export default db;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue