Compare commits
No commits in common. "main" and "cf-priority" have entirely different histories.
main
...
cf-priorit
96 changed files with 1242 additions and 1704 deletions
|
@ -71,7 +71,7 @@ builds:
|
||||||
nfpms:
|
nfpms:
|
||||||
-
|
-
|
||||||
package_name: ntfy
|
package_name: ntfy
|
||||||
homepage: https://git.zio.sh/astra/ntfy/v2
|
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
|
||||||
license: Apache 2.0
|
license: Apache 2.0
|
||||||
|
|
|
@ -2,17 +2,13 @@ FROM golang:1.20-bullseye as builder
|
||||||
|
|
||||||
ARG VERSION=dev
|
ARG VERSION=dev
|
||||||
ARG COMMIT=unknown
|
ARG COMMIT=unknown
|
||||||
ARG NODE_MAJOR=18
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update
|
||||||
build-essential ca-certificates curl gnupg \
|
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash
|
||||||
&& mkdir -p /etc/apt/keyrings \
|
RUN apt-get install -y \
|
||||||
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
|
build-essential \
|
||||||
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" >> /etc/apt/sources.list.d/nodesource.list \
|
nodejs \
|
||||||
&& apt-get update \
|
python3-pip
|
||||||
&& apt-get install -y \
|
|
||||||
python3-pip nodejs \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
ADD Makefile .
|
ADD Makefile .
|
||||||
|
|
25
Makefile
25
Makefile
|
@ -39,8 +39,8 @@ help:
|
||||||
@echo " make web-deps - Install web app dependencies (npm install the universe)"
|
@echo " make web-deps - Install web app dependencies (npm install the universe)"
|
||||||
@echo " make web-build - Actually build the web app"
|
@echo " make web-build - Actually build the web app"
|
||||||
@echo " make web-lint - Run eslint on the web app"
|
@echo " make web-lint - Run eslint on the web app"
|
||||||
@echo " make web-fmt - Run prettier on the web app"
|
@echo " make web-format - Run prettier on the web app"
|
||||||
@echo " make web-fmt-check - Run prettier on the web app, but don't change anything"
|
@echo " make web-format-check - Run prettier on the web app, but don't change anything"
|
||||||
@echo
|
@echo
|
||||||
@echo "Build documentation:"
|
@echo "Build documentation:"
|
||||||
@echo " make docs - Build the documentation"
|
@echo " make docs - Build the documentation"
|
||||||
|
@ -111,7 +111,18 @@ build-deps-ubuntu:
|
||||||
docs: docs-deps docs-build
|
docs: docs-deps docs-build
|
||||||
|
|
||||||
docs-build: .PHONY
|
docs-build: .PHONY
|
||||||
mkdocs build
|
@if ! /bin/echo -e "import sys\nif sys.version_info < (3,8):\n exit(1)" | python3; then \
|
||||||
|
if which python3.8; then \
|
||||||
|
echo "python3.8 $(shell which mkdocs) build"; \
|
||||||
|
python3.8 $(shell which mkdocs) build; \
|
||||||
|
else \
|
||||||
|
echo "ERROR: Python version too low. mkdocs-material needs >= 3.8"; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
else \
|
||||||
|
echo "mkdocs build"; \
|
||||||
|
mkdocs build; \
|
||||||
|
fi
|
||||||
|
|
||||||
docs-deps: .PHONY
|
docs-deps: .PHONY
|
||||||
pip3 install -r requirements.txt
|
pip3 install -r requirements.txt
|
||||||
|
@ -140,10 +151,10 @@ web-deps:
|
||||||
web-deps-update:
|
web-deps-update:
|
||||||
cd web && npm update
|
cd web && npm update
|
||||||
|
|
||||||
web-fmt:
|
web-format:
|
||||||
cd web && npm run format
|
cd web && npm run format
|
||||||
|
|
||||||
web-fmt-check:
|
web-format-check:
|
||||||
cd web && npm run format:check
|
cd web && npm run format:check
|
||||||
|
|
||||||
web-lint:
|
web-lint:
|
||||||
|
@ -237,7 +248,7 @@ cli-build-results:
|
||||||
|
|
||||||
# Test/check targets
|
# Test/check targets
|
||||||
|
|
||||||
check: test web-fmt-check fmt-check vet web-lint lint staticcheck
|
check: test web-format-check fmt-check vet web-lint lint staticcheck
|
||||||
|
|
||||||
test: .PHONY
|
test: .PHONY
|
||||||
go test $(shell go list ./... | grep -vE 'ntfy/(test|examples|tools)')
|
go test $(shell go list ./... | grep -vE 'ntfy/(test|examples|tools)')
|
||||||
|
@ -264,7 +275,7 @@ coverage-upload:
|
||||||
|
|
||||||
# Lint/formatting targets
|
# Lint/formatting targets
|
||||||
|
|
||||||
fmt: web-fmt
|
fmt:
|
||||||
gofmt -s -w .
|
gofmt -s -w .
|
||||||
|
|
||||||
fmt-check:
|
fmt-check:
|
||||||
|
|
183
README.md
183
README.md
|
@ -1,9 +1,190 @@
|
||||||
|

|
||||||
|
|
||||||
# ntfy.sh | Send push notifications to your phone or desktop via PUT/POST
|
# ntfy.sh | Send push notifications to your phone or desktop via PUT/POST
|
||||||
|
[](https://github.com/binwiederhier/ntfy/releases/latest)
|
||||||
|
[](https://pkg.go.dev/heckel.io/ntfy)
|
||||||
|
[](https://github.com/binwiederhier/ntfy/actions)
|
||||||
|
[](https://goreportcard.com/report/github.com/binwiederhier/ntfy)
|
||||||
|
[](https://codecov.io/gh/binwiederhier/ntfy)
|
||||||
|
[](https://discord.gg/cT7ECsZj9w)
|
||||||
|
[](https://matrix.to/#/#ntfy:matrix.org)
|
||||||
|
[](https://matrix.to/#/#ntfy-space:matrix.org)
|
||||||
|
[](https://discuss.ntfy.sh/c/ntfy)
|
||||||
|
[](https://ntfy.statuspage.io/)
|
||||||
|
[](https://gitpod.io/#https://github.com/binwiederhier/ntfy)
|
||||||
|
|
||||||
**ntfy** (pronounced "*notify*") is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern)
|
**ntfy** (pronounced "*notify*") is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern)
|
||||||
notification service. With ntfy, you can **send notifications to your phone or desktop via scripts** from any computer,
|
notification service. With ntfy, you can **send notifications to your phone or desktop via scripts** from any computer,
|
||||||
**without having to sign up or pay any fees**. If you'd like to run your own instance of the service, you can easily do
|
**without having to sign up or pay any fees**. If you'd like to run your own instance of the service, you can easily do
|
||||||
so since ntfy is open source.
|
so since ntfy is open source.
|
||||||
|
|
||||||
|
You can access the free version of ntfy at **[ntfy.sh](https://ntfy.sh)**. There is also an [open-source Android app](https://github.com/binwiederhier/ntfy-android)
|
||||||
|
available on [Google Play](https://play.google.com/store/apps/details?id=io.heckel.ntfy) or [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/),
|
||||||
|
as well as an [open source iOS app](https://github.com/binwiederhier/ntfy-ios) available on the [App Store](https://apps.apple.com/us/app/ntfy/id1625396347).
|
||||||
|
|
||||||
### This is a fork of [github.com/binwiederhier/ntfy](https://github.com/binwiederhier/ntfy)
|
<p>
|
||||||
|
<img src=".github/images/screenshot-curl.png" height="180">
|
||||||
|
<img src=".github/images/screenshot-web-detail.png" height="180">
|
||||||
|
<img src=".github/images/screenshot-phone-main.jpg" height="180">
|
||||||
|
<img src=".github/images/screenshot-phone-detail.jpg" height="180">
|
||||||
|
<img src=".github/images/screenshot-phone-notification.jpg" height="180">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
## [ntfy Pro](https://ntfy.sh/app) 💸 🎉
|
||||||
|
I now offer paid plans for [ntfy.sh](https://ntfy.sh/) if you don't want to self-host, or you want to support the development of ntfy (→ [Purchase via web app](https://ntfy.sh/app)). You can **buy a plan for as low as $3.33/month** (if you use promo code `MYTOPIC`, limited time only). You can also donate via [GitHub Sponsors](https://github.com/sponsors/binwiederhier), and [Liberapay](https://liberapay.com/ntfy). I would be very humbled by your sponsorship. ❤️
|
||||||
|
|
||||||
|
## **[Documentation](https://ntfy.sh/docs/)**
|
||||||
|
|
||||||
|
[Getting started](https://ntfy.sh/docs/) |
|
||||||
|
[Android/iOS](https://ntfy.sh/docs/subscribe/phone/) |
|
||||||
|
[API](https://ntfy.sh/docs/publish/) |
|
||||||
|
[Install / Self-hosting](https://ntfy.sh/docs/install/) |
|
||||||
|
[Building](https://ntfy.sh/docs/develop/)
|
||||||
|
|
||||||
|
## Chat/forum
|
||||||
|
There are a few ways to get in touch with me and/or the rest of the community. Feel free to use any of these methods. Whatever
|
||||||
|
works best for you:
|
||||||
|
|
||||||
|
* [Discord server](https://discord.gg/cT7ECsZj9w) - direct chat with the community
|
||||||
|
* [Matrix room #ntfy](https://matrix.to/#/#ntfy:matrix.org) (+ [Matrix space](https://matrix.to/#/#ntfy-space:matrix.org)) - same chat, bridged from Discord
|
||||||
|
* [Lemmy discussion board](https://discuss.ntfy.sh/c/ntfy) - asynchronous forum (_new as of June 2023_)
|
||||||
|
* [GitHub issues](https://github.com/binwiederhier/ntfy/issues) - questions, features, bugs
|
||||||
|
|
||||||
|
## Announcements/beta testers
|
||||||
|
For announcements of new releases and cutting-edge beta versions, please subscribe to the [ntfy.sh/announcements](https://ntfy.sh/announcements)
|
||||||
|
topic. If you'd like to test the iOS app, join [TestFlight](https://testflight.apple.com/join/P1fFnAm9). For Android betas,
|
||||||
|
join Discord/Matrix (I'll eventually make a testing channel in Google Play).
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
I welcome any contributions. Just create a PR or an issue. For larger features/ideas, please reach out
|
||||||
|
on Discord/Matrix first to see if I'd accept them. To contribute code, check out the [build instructions](https://ntfy.sh/docs/develop/)
|
||||||
|
for the server and the Android app. Or, if you'd like to help translate 🇩🇪 🇺🇸 🇧🇬, you can start immediately in
|
||||||
|
[Hosted Weblate](https://hosted.weblate.org/projects/ntfy/).
|
||||||
|
|
||||||
|
<a href="https://hosted.weblate.org/engage/ntfy/">
|
||||||
|
<img src="https://hosted.weblate.org/widgets/ntfy/-/multi-blue.svg" alt="Translation status" />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
## Sponsors
|
||||||
|
I have just very recently started accepting donations via [GitHub Sponsors](https://github.com/sponsors/binwiederhier),
|
||||||
|
and [Liberapay](https://liberapay.com/ntfy). I would be humbled if you helped me carry the server and developer
|
||||||
|
account costs. Even small donations are very much appreciated. A big fat **Thank You** to the folks already sponsoring ntfy:
|
||||||
|
|
||||||
|
<a href="https://github.com/neutralinsomniac"><img src="https://github.com/neutralinsomniac.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/aspyct"><img src="https://github.com/aspyct.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/nickexyz"><img src="https://github.com/nickexyz.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/qcasey"><img src="https://github.com/qcasey.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/mckay115"><img src="https://github.com/mckay115.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/Salamafet"><img src="https://github.com/Salamafet.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/codinghipster"><img src="https://github.com/codinghipster.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/HinFort"><img src="https://github.com/HinFort.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/Lexevolution"><img src="https://github.com/Lexevolution.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/johnnyip"><img src="https://github.com/johnnyip.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/JonDerThan"><img src="https://github.com/JonDerThan.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/12nick12"><img src="https://github.com/12nick12.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/eanplatter"><img src="https://github.com/eanplatter.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/fnoelscher"><img src="https://github.com/fnoelscher.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/bnorick"><img src="https://github.com/bnorick.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/snh"><img src="https://github.com/snh.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/hen-x"><img src="https://github.com/hen-x.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/JamieGoodson"><img src="https://github.com/JamieGoodson.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/cremesk"><img src="https://github.com/cremesk.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/dangowans"><img src="https://github.com/dangowans.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/mnault"><img src="https://github.com/mnault.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/nwithan8"><img src="https://github.com/nwithan8.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/peterleiser"><img src="https://github.com/peterleiser.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/portothree"><img src="https://github.com/portothree.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/finngreig"><img src="https://github.com/finngreig.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/skrollme"><img src="https://github.com/skrollme.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/gergepalfi"><img src="https://github.com/gergepalfi.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/tonyakwei"><img src="https://github.com/tonyakwei.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/crosbyh"><img src="https://github.com/crosbyh.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/mdlnr"><img src="https://github.com/mdlnr.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/p-samuel"><img src="https://github.com/p-samuel.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/zugaldia"><img src="https://github.com/zugaldia.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/NathanSweet"><img src="https://github.com/NathanSweet.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/msdeibel"><img src="https://github.com/msdeibel.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/ksurl"><img src="https://github.com/ksurl.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/CodingTimeDEV"><img src="https://github.com/CodingTimeDEV.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/Terrormixer3000"><img src="https://github.com/Terrormixer3000.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/voroskoi"><img src="https://github.com/voroskoi.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/Nickwasused"><img src="https://github.com/Nickwasused.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/bahur142"><img src="https://github.com/bahur142.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/vinhdizzo"><img src="https://github.com/vinhdizzo.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/Ge0rg3"><img src="https://github.com/Ge0rg3.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/biopsin"><img src="https://github.com/biopsin.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/thebino"><img src="https://github.com/thebino.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/sky4055"><img src="https://github.com/sky4055.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/julianlam"><img src="https://github.com/julianlam.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/andreapx"><img src="https://github.com/andreapx.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/billycao"><img src="https://github.com/billycao.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/zoic21"><img src="https://github.com/zoic21.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/IanKulin"><img src="https://github.com/IanKulin.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/Joachim256"><img src="https://github.com/Joachim256.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/overtone1000"><img src="https://github.com/overtone1000.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/oakd"><img src="https://github.com/oakd.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/KucharczykL"><img src="https://github.com/KucharczykL.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/hansbickhofe"><img src="https://github.com/hansbickhofe.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/caseodilla"><img src="https://github.com/caseodilla.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/0xAF"><img src="https://github.com/0xAF.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/soonoo"><img src="https://github.com/soonoo.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/nichu42"><img src="https://github.com/nichu42.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/samliebow"><img src="https://github.com/samliebow.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/johman10"><img src="https://github.com/johman10.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/R-Gld"><img src="https://github.com/R-Gld.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/FingerlessGlov3s"><img src="https://github.com/FingerlessGlov3s.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/Twisterado"><img src="https://github.com/Twisterado.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/ScrumpyJack"><img src="https://github.com/ScrumpyJack.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/andrejarrell"><img src="https://github.com/andrejarrell.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/oaustegard"><img src="https://github.com/oaustegard.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/CreativeWarlock"><img src="https://github.com/CreativeWarlock.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/darkdragon-001"><img src="https://github.com/darkdragon-001.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/jonathan-kosgei"><img src="https://github.com/jonathan-kosgei.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/KevinWang15"><img src="https://github.com/KevinWang15.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/darkmattercoder"><img src="https://github.com/darkmattercoder.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/bmcgonag"><img src="https://github.com/bmcgonag.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/skorokithakis"><img src="https://github.com/skorokithakis.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/eenturk"><img src="https://github.com/eenturk.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/spirossi"><img src="https://github.com/spirossi.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/teomarcdhio"><img src="https://github.com/teomarcdhio.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/MarcMichalsky"><img src="https://github.com/MarcMichalsky.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/LuckVintage"><img src="https://github.com/LuckVintage.png" width="40px" /></a>
|
||||||
|
<a href="https://github.com/spartan"><img src="https://github.com/spartan.png" width="40px" /></a>
|
||||||
|
|
||||||
|
I'd also like to thank JetBrains for their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/),
|
||||||
|
and [DigitalOcean](https://m.do.co/c/442b929528db) (*referral link*) for supporting the project:
|
||||||
|
|
||||||
|
<a href="https://m.do.co/c/442b929528db"><img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="201px"></a>
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
**We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.**
|
||||||
|
|
||||||
|
_Please be sure to read the complete [Code of Conduct](CODE_OF_CONDUCT.md)._
|
||||||
|
|
||||||
|
## License
|
||||||
|
Made with ❤️ by [Philipp C. Heckel](https://heckel.io).
|
||||||
|
The project is dual licensed under the [Apache License 2.0](LICENSE) and the [GPLv2 License](LICENSE.GPLv2).
|
||||||
|
|
||||||
|
Third-party libraries and resources:
|
||||||
|
* [github.com/urfave/cli](https://github.com/urfave/cli) (MIT) is used to drive the CLI
|
||||||
|
* [Mixkit sounds](https://mixkit.co/free-sound-effects/notification/) (Mixkit Free License) are used as notification sounds
|
||||||
|
* [Sounds from notificationsounds.com](https://notificationsounds.com) (Creative Commons Attribution) are used as notification sounds
|
||||||
|
* [Roboto Font](https://fonts.google.com/specimen/Roboto) (Apache 2.0) is used as a font in everything web
|
||||||
|
* [React](https://reactjs.org/) (MIT) is used for the web app
|
||||||
|
* [Material UI components](https://mui.com/) (MIT) are used in the web app
|
||||||
|
* [MUI dashboard template](https://github.com/mui/material-ui/tree/master/docs/data/material/getting-started/templates/dashboard) (MIT) was used as a basis for the web app
|
||||||
|
* [Dexie.js](https://github.com/dexie/Dexie.js) (Apache 2.0) is used for web app persistence in IndexedDB
|
||||||
|
* [GoReleaser](https://goreleaser.com/) (MIT) is used to create releases
|
||||||
|
* [go-smtp](https://github.com/emersion/go-smtp) (MIT) is used to receive e-mails
|
||||||
|
* [stretchr/testify](https://github.com/stretchr/testify) (MIT) is used for unit and integration tests
|
||||||
|
* [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) (MIT) is used to provide the persistent message cache
|
||||||
|
* [Firebase Admin SDK](https://github.com/firebase/firebase-admin-go) (Apache 2.0) is used to send FCM messages
|
||||||
|
* [github/gemoji](https://github.com/github/gemoji) (MIT) is used for emoji support (specifically the [emoji.json](https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json) file)
|
||||||
|
* [Lightbox with vanilla JS](https://yossiabramov.com/blog/vanilla-js-lightbox) as a lightbox on the landing page
|
||||||
|
* [HTTP middleware for gzip compression](https://gist.github.com/CJEnright/bc2d8b8dc0c1389a9feeddb110f822d7) (MIT) is used for serving static files
|
||||||
|
* [Regex for auto-linking](https://github.com/bryanwoods/autolink-js) (MIT) is used to highlight links (the library is not used)
|
||||||
|
* [Statically linking go-sqlite3](https://www.arp242.net/static-go.html)
|
||||||
|
* [Linked tabs in mkdocs](https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/#linked-tabs)
|
||||||
|
* [webpush-go](https://github.com/SherClockHolmes/webpush-go) (MIT) is used to send web push notifications
|
||||||
|
|
|
@ -7,8 +7,8 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
|
|
@ -2,10 +2,10 @@ package client_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/client"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/test"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/test"
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package client_test
|
package client_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/client"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -2,7 +2,7 @@ package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
|
@ -5,9 +5,9 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -2,10 +2,10 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/test"
|
|
||||||
"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/test"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"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"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,9 +3,9 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"git.zio.sh/astra/ntfy/v2/client"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -2,10 +2,10 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"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"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,10 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/client"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/urfave/cli/v2"
|
"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"
|
||||||
|
|
|
@ -2,9 +2,9 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/test"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/test"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
|
|
|
@ -5,8 +5,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"github.com/stripe/stripe-go/v74"
|
"github.com/stripe/stripe-go/v74"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"math"
|
"math"
|
||||||
"net"
|
"net"
|
||||||
|
@ -17,12 +17,12 @@ import (
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"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/server"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -9,12 +9,12 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/client"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/test"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/client"
|
||||||
|
"heckel.io/ntfy/test"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -3,10 +3,10 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/client"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/urfave/cli/v2"
|
"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"
|
||||||
|
|
|
@ -5,9 +5,9 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/test"
|
|
||||||
"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/test"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,9 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,10 +2,10 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/test"
|
|
||||||
"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/test"
|
||||||
"regexp"
|
"regexp"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,13 +6,13 @@ import (
|
||||||
"crypto/subtle"
|
"crypto/subtle"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"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/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/test"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"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/test"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -3,9 +3,9 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCLI_WebPush_GenerateKeys(t *testing.T) {
|
func TestCLI_WebPush_GenerateKeys(t *testing.T) {
|
||||||
|
|
|
@ -1180,10 +1180,10 @@ and [here](https://easyengine.io/tutorials/nginx/block-wp-login-php-bruteforce-a
|
||||||
|
|
||||||
## Health checks
|
## Health checks
|
||||||
A preliminary health check API endpoint is exposed at `/v1/health`. The endpoint returns a `json` response in the format shown below.
|
A preliminary health check API endpoint is exposed at `/v1/health`. The endpoint returns a `json` response in the format shown below.
|
||||||
If a non-200 HTTP status code is returned or if the returned `healthy` field is `false` the ntfy service should be considered as unhealthy.
|
If a non-200 HTTP status code is returned or if the returned `health` field is `false` the ntfy service should be considered as unhealthy.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{"healthy":true}
|
{"health":true}
|
||||||
```
|
```
|
||||||
|
|
||||||
See [Installation for Docker](install.md#docker) for an example of how this could be used in a `docker-compose` environment.
|
See [Installation for Docker](install.md#docker) for an example of how this could be used in a `docker-compose` environment.
|
||||||
|
|
|
@ -429,7 +429,7 @@ steps:
|
||||||
|
|
||||||
### XCode setup
|
### XCode setup
|
||||||
|
|
||||||
1. Follow step 4 of [Add Firebase to your Apple project](https://firebase.google.com/docs/ios/setup) to install the
|
1. Follow step 4 of [https://firebase.google.com/docs/ios/setup](Add Firebase to your Apple project) to install the
|
||||||
`firebase-ios-sdk` in XCode, if it's not already present - you can select any packages in addition to Firebase Core / Firebase Messaging
|
`firebase-ios-sdk` in XCode, if it's not already present - you can select any packages in addition to Firebase Core / Firebase Messaging
|
||||||
1. Similarly, install the SQLite.swift package dependency in XCode
|
1. Similarly, install the SQLite.swift package dependency in XCode
|
||||||
1. When running the debug build, ensure XCode is pointed to the connected iOS device - registering for push notifications does not work in the iOS simulators
|
1. When running the debug build, ensure XCode is pointed to the connected iOS device - registering for push notifications does not work in the iOS simulators
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
<!-- This file was generated by scripts/emoji-convert.sh -->
|
<!-- This file was generated by scripts/emoji-convert.sh -->
|
||||||
|
|
||||||
You can [tag messages](publish.md#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically
|
You can [tag messages](../publish/#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically
|
||||||
converted to emojis. This is a reference of all supported emojis. To learn more about the feature, please refer to the
|
converted to emojis. This is a reference of all supported emojis. To learn more about the feature, please refer to the
|
||||||
[tagging and emojis page](publish.md#tags-emojis).
|
[tagging and emojis page](../publish/#tags-emojis).
|
||||||
|
|
||||||
<table class="remove-md-box emoji-table"><tr>
|
<table class="remove-md-box emoji-table"><tr>
|
||||||
|
|
||||||
|
|
|
@ -135,21 +135,6 @@ You can send a message during a workflow run with curl. Here is an example sendi
|
||||||
${{ secrets.NTFY_URL }}
|
${{ secrets.NTFY_URL }}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Changedetection.io
|
|
||||||
ntfy is an excellent choice for getting notifications when a website has a change sent to your mobile (or desktop),
|
|
||||||
[changedetection.io](https://changedetection.io) or on GitHub ([dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io))
|
|
||||||
uses [apprise](https://github.com/caronc/apprise) library for notification integrations.
|
|
||||||
|
|
||||||
To add any ntfy(s) notification to a website change simply add the [ntfy style URL](https://github.com/caronc/apprise/wiki/Notify_ntfy)
|
|
||||||
to the notification list.
|
|
||||||
|
|
||||||
For example `ntfy://{topic}` or `ntfy://{user}:{password}@{host}:{port}/{topics}`
|
|
||||||
|
|
||||||
In your changedetection.io installation, click `Edit` > `Notifications` on a single website watch (or group) then add
|
|
||||||
the special ntfy Apprise Notification URL to the Notification List.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Watchtower (shoutrrr)
|
## Watchtower (shoutrrr)
|
||||||
You can use [shoutrrr](https://containrrr.dev/shoutrrr/latest/services/ntfy/) to send
|
You can use [shoutrrr](https://containrrr.dev/shoutrrr/latest/services/ntfy/) to send
|
||||||
[Watchtower](https://github.com/containrrr/watchtower/) notifications to your ntfy topic.
|
[Watchtower](https://github.com/containrrr/watchtower/) notifications to your ntfy topic.
|
||||||
|
|
|
@ -14,15 +14,14 @@ We support amd64, armv7 and arm64.
|
||||||
|
|
||||||
1. Install ntfy using one of the methods described below
|
1. Install ntfy using one of the methods described below
|
||||||
2. Then (optionally) edit `/etc/ntfy/server.yml` for the server (Linux only, see [configuration](config.md) or [sample server.yml](https://github.com/binwiederhier/ntfy/blob/main/server/server.yml))
|
2. Then (optionally) edit `/etc/ntfy/server.yml` for the server (Linux only, see [configuration](config.md) or [sample server.yml](https://github.com/binwiederhier/ntfy/blob/main/server/server.yml))
|
||||||
3. Or (optionally) create/edit `~/.config/ntfy/client.yml` (for the non-root user), `~/Library/Application Support/ntfy/client.yml` (for the macOS non-root user), or `/etc/ntfy/client.yml` (for the root user), see [sample client.yml](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml))
|
3. Or (optionally) create/edit `~/.config/ntfy/client.yml` (for the non-root user) or `/etc/ntfy/client.yml` (for the root user), see [sample client.yml](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml))
|
||||||
|
|
||||||
To run the ntfy server, then just run `ntfy serve` (or `systemctl start ntfy` when using the deb/rpm).
|
To run the ntfy server, then just run `ntfy serve` (or `systemctl start ntfy` when using the deb/rpm).
|
||||||
To send messages, use `ntfy publish`. To subscribe to topics, use `ntfy subscribe` (see [subscribing via CLI](subscribe/cli.md)
|
To send messages, use `ntfy publish`. To subscribe to topics, use `ntfy subscribe` (see [subscribing via CLI](subscribe/cli.md)
|
||||||
for details).
|
for details).
|
||||||
|
|
||||||
If you like tutorials, check out :simple-youtube: [Kris Occhipinti's ntfy install guide](https://www.youtube.com/watch?v=bZzqrX05mNU) on YouTube, or
|
If you like video tutorials, check out :simple-youtube: [Kris Occhipinti's ntfy install guide](https://www.youtube.com/watch?v=bZzqrX05mNU).
|
||||||
[Alex's Docker-based setup guide](https://blog.alexsguardian.net/posts/2023/09/12/selfhosting-ntfy/). Both are great
|
It's short and to the point. _I am not affiliated with Kris, I just liked the video._
|
||||||
resources to get started. _I am not affiliated with Kris or Alex, I just liked their video/post._
|
|
||||||
|
|
||||||
## Linux binaries
|
## Linux binaries
|
||||||
Please check out the [releases page](https://github.com/binwiederhier/ntfy/releases) for binaries and
|
Please check out the [releases page](https://github.com/binwiederhier/ntfy/releases) for binaries and
|
||||||
|
|
|
@ -24,7 +24,6 @@ I've added a ⭐ to projects or posts that have a significant following, or had
|
||||||
- [diun](https://crazymax.dev/diun/) - Docker Image Update Notifier
|
- [diun](https://crazymax.dev/diun/) - Docker Image Update Notifier
|
||||||
- [Cloudron](https://www.cloudron.io/store/sh.ntfy.cloudronapp.html) - Platform that makes it easy to manage web apps on your server
|
- [Cloudron](https://www.cloudron.io/store/sh.ntfy.cloudronapp.html) - Platform that makes it easy to manage web apps on your server
|
||||||
- [Xitoring](https://xitoring.com/docs/notifications/notification-roles/ntfy/) - Server and Uptime monitoring
|
- [Xitoring](https://xitoring.com/docs/notifications/notification-roles/ntfy/) - Server and Uptime monitoring
|
||||||
- [changedetection.io](https://changedetection.io) ⭐ - Website change detection and notification
|
|
||||||
|
|
||||||
## Integration via HTTP/SMTP/etc.
|
## Integration via HTTP/SMTP/etc.
|
||||||
|
|
||||||
|
@ -59,7 +58,6 @@ I've added a ⭐ to projects or posts that have a significant following, or had
|
||||||
- [ntfy_dart](https://github.com/jr1221/ntfy_dart) - Dart wrapper around the ntfy API (Dart)
|
- [ntfy_dart](https://github.com/jr1221/ntfy_dart) - Dart wrapper around the ntfy API (Dart)
|
||||||
- [gotfy](https://github.com/AnthonyHewins/gotfy) - A Go wrapper for the ntfy API (Go)
|
- [gotfy](https://github.com/AnthonyHewins/gotfy) - A Go wrapper for the ntfy API (Go)
|
||||||
- [symfony/ntfy-notifier](https://symfony.com/components/NtfyNotifier) ⭐ - Symfony Notifier integration for ntfy (PHP)
|
- [symfony/ntfy-notifier](https://symfony.com/components/NtfyNotifier) ⭐ - Symfony Notifier integration for ntfy (PHP)
|
||||||
- [ntfy-java](https://github.com/MaheshBabu11/ntfy-java/) - A Java package to interact with a ntfy server (Java)
|
|
||||||
|
|
||||||
## CLIs + GUIs
|
## CLIs + GUIs
|
||||||
|
|
||||||
|
@ -131,28 +129,11 @@ I've added a ⭐ to projects or posts that have a significant following, or had
|
||||||
- [vigilant](https://github.com/VerifiedJoseph/vigilant) - Monitor RSS/ATOM and JSON feeds, and send push notifications on new entries (PHP)
|
- [vigilant](https://github.com/VerifiedJoseph/vigilant) - Monitor RSS/ATOM and JSON feeds, and send push notifications on new entries (PHP)
|
||||||
- [ansible-role-ntfy-alertmanager](https://github.com/bleetube/ansible-role-ntfy-alertmanager) - Ansible role to install xenrox/ntfy-alertmanager
|
- [ansible-role-ntfy-alertmanager](https://github.com/bleetube/ansible-role-ntfy-alertmanager) - Ansible role to install xenrox/ntfy-alertmanager
|
||||||
- [NtfyMe-Blender](https://github.com/NotNanook/NtfyMe-Blender) - Blender addon to send notifications to NtfyMe (Python)
|
- [NtfyMe-Blender](https://github.com/NotNanook/NtfyMe-Blender) - Blender addon to send notifications to NtfyMe (Python)
|
||||||
- [ntfy-ios-url-share](https://www.icloud.com/shortcuts/be8a7f49530c45f79733cfe3e41887e6) - An iOS shortcut that lets you share URLs easily and quickly.
|
- [ntfy-ios-filesharing](https://www.icloud.com/shortcuts/fe948d151b2e4ae08fb2f9d6b27d680b) - An iOS shortcut that let's you share files from your share feed to a topic of your choice.
|
||||||
- [ntfy-ios-filesharing](https://www.icloud.com/shortcuts/fe948d151b2e4ae08fb2f9d6b27d680b) - An iOS shortcut that lets you share files from your share feed to a topic of your choice.
|
|
||||||
- [systemd-ntfy](https://hackage.haskell.org/package/systemd-ntfy) - monitor a set of systemd services an send a notification to ntfy.sh whenever their status changes
|
|
||||||
- [RouterOS Scripts](https://git.eworm.de/cgit/routeros-scripts/about/) - a collection of scripts for MikroTik RouterOS
|
|
||||||
- [ntfy-android-builder](https://github.com/TheBlusky/ntfy-android-builder) - Script for building ntfy-android with custom Firebase configuration (Docker/Shell)
|
|
||||||
|
|
||||||
## Blog + forum posts
|
## Blog + forum posts
|
||||||
|
|
||||||
- [Installing Self Host NTFY On Linux Using Docker Container](https://www.pinoylinux.org/topicsplus/containers/installing-self-host-ntfy-on-linux-using-docker-container/) - pinoylinux.org - 9/2023
|
|
||||||
- [Homelab Notifications with ntfy](https://blog.alexsguardian.net/posts/2023/09/12/selfhosting-ntfy/) ⭐ - alexsguardian.net - 9/2023
|
|
||||||
- [Why NTFY is the Ultimate Push Notification Tool for Your Needs](https://osintph.medium.com/why-ntfy-is-the-ultimate-push-notification-tool-for-your-needs-e767421c84c5) - osintph.medium.com - 9/2023
|
|
||||||
- [Supercharge Your Alerts: Ntfy — The Ultimate Push Notification Solution](https://medium.com/spring-boot/supercharge-your-alerts-ntfy-the-ultimate-push-notification-solution-a3dda79651fe) - spring-boot.medium.com - 9/2023
|
|
||||||
- [Deploy Ntfy using Docker](https://www.linkedin.com/pulse/deploy-ntfy-mohamed-sharfy/) - linkedin.com - 9/2023
|
|
||||||
- [Send Notifications With Ntfy for New WordPress Posts](https://www.activepieces.com/blog/ntfy-notifications-for-wordpress-new-posts) - activepieces.com - 9/2023
|
|
||||||
- [Get Ntfy Notifications About New Zendesk Ticket](https://www.activepieces.com/blog/ntfy-notifications-about-new-zendesk-tickets) - activepieces.com - 9/2023
|
|
||||||
- [Set reminder for recurring events using ntfy & Cron](https://www.youtube.com/watch?v=J3O4aQ-EcYk) - youtube.com - 9/2023
|
|
||||||
- [ntfy - Installation and full configuration setup](https://www.youtube.com/watch?v=QMy14rGmpFI) - youtube.com - 9/2023
|
|
||||||
- [How to install Ntfy.sh on Portainer / Docker Compose](https://www.youtube.com/watch?v=utD9GNbAwyg) - youtube.com - 9/2023
|
|
||||||
- [ntfy - Push-Benachrichtigungen // Push Notifications](https://www.youtube.com/watch?v=LE3vRPPqZOU) - youtube.com - 9/2023
|
|
||||||
- [Podman Update Notifications via Ntfy](https://rair.dev/podman-upadte-notifications-ntfy/) - rair.dev - 9/2023
|
|
||||||
- [NetworkChunk - how did I NOT know about this?](https://www.youtube.com/watch?v=poDIT2ruQ9M) ⭐ - youtube.com - 8/2023
|
- [NetworkChunk - how did I NOT know about this?](https://www.youtube.com/watch?v=poDIT2ruQ9M) ⭐ - youtube.com - 8/2023
|
||||||
- [NTFY - Command-Line Notifications](https://academy.networkchuck.com/blog/ntfy/) - academy.networkchuck.com - 8/2023
|
|
||||||
- [Open Source Push Notifications! Get notified of any event you can imagine. Triggers abound!](https://www.youtube.com/watch?v=WJgwWXt79pE) ⭐ - youtube.com - 8/2023
|
- [Open Source Push Notifications! Get notified of any event you can imagine. Triggers abound!](https://www.youtube.com/watch?v=WJgwWXt79pE) ⭐ - youtube.com - 8/2023
|
||||||
- [How to install and self host an Ntfy server on Linux](https://linuxconfig.org/how-to-install-and-self-host-an-ntfy-server-on-linux) - linuxconfig.org - 7/2023
|
- [How to install and self host an Ntfy server on Linux](https://linuxconfig.org/how-to-install-and-self-host-an-ntfy-server-on-linux) - linuxconfig.org - 7/2023
|
||||||
- [Basic website monitoring using cronjobs and ntfy.sh](https://burkhardt.dev/2023/website-monitoring-cron-ntfy/) - burkhardt.dev - 6/2023
|
- [Basic website monitoring using cronjobs and ntfy.sh](https://burkhardt.dev/2023/website-monitoring-cron-ntfy/) - burkhardt.dev - 6/2023
|
||||||
|
@ -238,7 +219,6 @@ ntfy community. Thanks to everyone running a public server. **You guys rock!**
|
||||||
| [ntfy.envs.net](https://ntfy.envs.net) | 🇩🇪 Germany |
|
| [ntfy.envs.net](https://ntfy.envs.net) | 🇩🇪 Germany |
|
||||||
| [ntfy.mzte.de](https://ntfy.mzte.de/) | 🇩🇪 Germany |
|
| [ntfy.mzte.de](https://ntfy.mzte.de/) | 🇩🇪 Germany |
|
||||||
| [ntfy.hostux.net](https://ntfy.hostux.net/) | 🇫🇷 France |
|
| [ntfy.hostux.net](https://ntfy.hostux.net/) | 🇫🇷 France |
|
||||||
| [ntfy.fossman.de](https://ntfy.fossman.de/) | 🇩🇪 Germany |
|
|
||||||
|
|
||||||
Please be aware that **server operators can log your messages**. The project also cannot guarantee the reliability
|
Please be aware that **server operators can log your messages**. The project also cannot guarantee the reliability
|
||||||
and uptime of third party servers, so use of each server is **at your own discretion**.
|
and uptime of third party servers, so use of each server is **at your own discretion**.
|
||||||
|
|
|
@ -34,6 +34,12 @@ your iOS device and your ntfy server are either on the same network, or that you
|
||||||
Turn on tracing/debugging on the server (via `log-level: trace` or `log-level: debug`, see [troubleshooting](troubleshooting.md)),
|
Turn on tracing/debugging on the server (via `log-level: trace` or `log-level: debug`, see [troubleshooting](troubleshooting.md)),
|
||||||
and read docs on [iOS instant notifications](https://docs.ntfy.sh/config/#ios-instant-notifications).
|
and read docs on [iOS instant notifications](https://docs.ntfy.sh/config/#ios-instant-notifications).
|
||||||
|
|
||||||
|
## Firefox on Android not automatically subscribing to web push (see [#789](https://github.com/binwiederhier/ntfy/issues/789))
|
||||||
|
ntfy defaults to web-push based subscriptions when installed as a [progressive web app](./subscribe/pwa.md). Firefox
|
||||||
|
Android has an [open bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1796434) where it reports the PWA mode incorrectly.
|
||||||
|
This causes ntfy to not automatically subscribe to web push, and requires you to go to the ntfy Settings page to enable
|
||||||
|
it manually.
|
||||||
|
|
||||||
## Safari does not play sounds for web push notifications
|
## Safari does not play sounds for web push notifications
|
||||||
Safari does not support playing sounds for web push notifications, and treats them all as silent. This will be fixed with
|
Safari does not support playing sounds for web push notifications, and treats them all as silent. This will be fixed with
|
||||||
iOS 17 / Safari 17, which will be released later in 2023.
|
iOS 17 / Safari 17, which will be released later in 2023.
|
||||||
|
|
|
@ -1131,7 +1131,7 @@ As of today, the following actions are supported:
|
||||||
when the action button is tapped (only supported on Android)
|
when the action button is tapped (only supported on Android)
|
||||||
* [`http`](#send-http-request): Sends HTTP POST/GET/PUT request when the action button is tapped
|
* [`http`](#send-http-request): Sends HTTP POST/GET/PUT request when the action button is tapped
|
||||||
|
|
||||||
Here's an example of what a notification with actions can look like:
|
Here's an example of what that a notification with actions can look like:
|
||||||
|
|
||||||
<figure markdown>
|
<figure markdown>
|
||||||
{ width=500 }
|
{ width=500 }
|
||||||
|
@ -2288,7 +2288,7 @@ You can define which URL to open when a notification is clicked. This may be use
|
||||||
to a Zabbix alert or a transaction that you'd like to provide the deep-link for. Tapping the notification will open
|
to a Zabbix alert or a transaction that you'd like to provide the deep-link for. Tapping the notification will open
|
||||||
the web browser (or the app) and open the website.
|
the web browser (or the app) and open the website.
|
||||||
|
|
||||||
To define a click action for the notification, pass a URL as the value of the `X-Click` header (or its alias `Click`).
|
To define a click action for the notification, pass a URL as the value of the `X-Click` header (or its aliase `Click`).
|
||||||
If you pass a website URL (`http://` or `https://`) the web browser will open. If you pass another URI that can be handled
|
If you pass a website URL (`http://` or `https://`) the web browser will open. If you pass another URI that can be handled
|
||||||
by another app, the responsible app may open.
|
by another app, the responsible app may open.
|
||||||
|
|
||||||
|
|
|
@ -1273,7 +1273,7 @@ Released Dec 28, 2021
|
||||||
|
|
||||||
**Features & bug fixes:**
|
**Features & bug fixes:**
|
||||||
|
|
||||||
* [Publish messages via e-mail](publish.md#e-mail-publishing) #66
|
* [Publish messages via e-mail](ntfy.sh/docs/publish/#e-mail-publishing) #66
|
||||||
* Server-side work to support [unifiedpush.org](https://unifiedpush.org) #64
|
* Server-side work to support [unifiedpush.org](https://unifiedpush.org) #64
|
||||||
* Fixing the Santa bug #65
|
* Fixing the Santa bug #65
|
||||||
|
|
||||||
|
@ -1290,8 +1290,6 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release
|
||||||
* Fix ACL issue with topic patterns containing underscores ([#840](https://github.com/binwiederhier/ntfy/issues/840), thanks to [@Joe-0237](https://github.com/Joe-0237) for reporting)
|
* Fix ACL issue with topic patterns containing underscores ([#840](https://github.com/binwiederhier/ntfy/issues/840), thanks to [@Joe-0237](https://github.com/Joe-0237) for reporting)
|
||||||
* Re-add `tzdata` to Docker images for amd64 image ([#894](https://github.com/binwiederhier/ntfy/issues/894), [#307](https://github.com/binwiederhier/ntfy/pull/307))
|
* Re-add `tzdata` to Docker images for amd64 image ([#894](https://github.com/binwiederhier/ntfy/issues/894), [#307](https://github.com/binwiederhier/ntfy/pull/307))
|
||||||
* Add special logic to ignore `Priority` header if it resembled a RFC 9218 value ([#851](https://github.com/binwiederhier/ntfy/pull/851)/[#895](https://github.com/binwiederhier/ntfy/pull/895), thanks to [@gusdleon](https://github.com/gusdleon), see also [#351](https://github.com/binwiederhier/ntfy/issues/351), [#353](https://github.com/binwiederhier/ntfy/issues/353), [#461](https://github.com/binwiederhier/ntfy/issues/461))
|
* Add special logic to ignore `Priority` header if it resembled a RFC 9218 value ([#851](https://github.com/binwiederhier/ntfy/pull/851)/[#895](https://github.com/binwiederhier/ntfy/pull/895), thanks to [@gusdleon](https://github.com/gusdleon), see also [#351](https://github.com/binwiederhier/ntfy/issues/351), [#353](https://github.com/binwiederhier/ntfy/issues/353), [#461](https://github.com/binwiederhier/ntfy/issues/461))
|
||||||
* PWA: hide install prompt on macOS 14 Safari ([#899](https://github.com/binwiederhier/ntfy/pull/899), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves))
|
|
||||||
* Fix web app crash in Edge for languages with underline in locale ([#922](https://github.com/binwiederhier/ntfy/pull/922)/[#912](https://github.com/binwiederhier/ntfy/issues/912)/[#852](https://github.com/binwiederhier/ntfy/issues/852), thanks to [@imkero](https://github.com/imkero))
|
|
||||||
|
|
||||||
### ntfy Android app v1.16.1 (UNRELEASED)
|
### ntfy Android app v1.16.1 (UNRELEASED)
|
||||||
|
|
||||||
|
|
BIN
docs/static/img/cdio-setup.jpg
vendored
BIN
docs/static/img/cdio-setup.jpg
vendored
Binary file not shown.
Before Width: | Height: | Size: 155 KiB |
Binary file not shown.
Before Width: | Height: | Size: 162 KiB |
|
@ -10,7 +10,7 @@ to topics via the ntfy CLI. The CLI is included in the same `ntfy` binary that c
|
||||||
## Install + configure
|
## Install + configure
|
||||||
To install the ntfy CLI, simply **follow the steps outlined on the [install page](../install.md)**. The ntfy server and
|
To install the ntfy CLI, simply **follow the steps outlined on the [install page](../install.md)**. The ntfy server and
|
||||||
client are the same binary, so it's all very convenient. After installing, you can (optionally) configure the client
|
client are the same binary, so it's all very convenient. After installing, you can (optionally) configure the client
|
||||||
by creating `~/.config/ntfy/client.yml` (for the non-root user), `~/Library/Application Support/ntfy/client.yml` (for the macOS non-root user), or `/etc/ntfy/client.yml` (for the root user). You
|
by creating `~/.config/ntfy/client.yml` (for the non-root user), or `/etc/ntfy/client.yml` (for the root user). You
|
||||||
can find a [skeleton config](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml) on GitHub.
|
can find a [skeleton config](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml) on GitHub.
|
||||||
|
|
||||||
If you just want to use [ntfy.sh](https://ntfy.sh), you don't have to change anything. If you **self-host your own server**,
|
If you just want to use [ntfy.sh](https://ntfy.sh), you don't have to change anything. If you **self-host your own server**,
|
||||||
|
|
|
@ -26,13 +26,6 @@ app drawer:
|
||||||
<a href="../../static/img/pwa-badge.png"><img src="../../static/img/pwa-badge.png"/></a>
|
<a href="../../static/img/pwa-badge.png"><img src="../../static/img/pwa-badge.png"/></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
### Safari on macOS
|
|
||||||
To install and register the web app via Safari, click on the Share menu and click Add to Dock. You need to be on macOS Sonoma (14) or higher.
|
|
||||||
|
|
||||||
<div id="pwa-screenshots-safari-desktop" class="screenshots">
|
|
||||||
<a href="../../static/img/pwa-install-macos-safari-add-to-dock.png"><img src="../../static/img/pwa-install-macos-safari-add-to-dock.png"/></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Chrome/Firefox on Android
|
### Chrome/Firefox on Android
|
||||||
For Chrome on Android, either click the "Add to Home Screen" banner at the bottom of the screen, or select "Install app"
|
For Chrome on Android, either click the "Add to Home Screen" banner at the bottom of the screen, or select "Install app"
|
||||||
in the menu, and then click "Install" in the popup menu. After installation, you can find the app in your app drawer,
|
in the menu, and then click "Install" in the popup menu. After installation, you can find the app in your app drawer,
|
||||||
|
|
67
go.mod
67
go.mod
|
@ -1,25 +1,25 @@
|
||||||
module git.zio.sh/astra/ntfy/v2
|
module heckel.io/ntfy
|
||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go/firestore v1.14.0 // indirect
|
cloud.google.com/go/firestore v1.13.0 // indirect
|
||||||
cloud.google.com/go/storage v1.34.1 // indirect
|
cloud.google.com/go/storage v1.33.0 // indirect
|
||||||
github.com/BurntSushi/toml v1.3.2 // indirect
|
github.com/BurntSushi/toml v1.3.2 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||||
github.com/emersion/go-smtp v0.18.0
|
github.com/emersion/go-smtp v0.18.0
|
||||||
github.com/gabriel-vasile/mimetype v1.4.3
|
github.com/gabriel-vasile/mimetype v1.4.2
|
||||||
github.com/gorilla/websocket v1.5.1
|
github.com/gorilla/websocket v1.5.0
|
||||||
github.com/mattn/go-sqlite3 v1.14.18
|
github.com/mattn/go-sqlite3 v1.14.17
|
||||||
github.com/olebedev/when v1.0.0
|
github.com/olebedev/when v1.0.0
|
||||||
github.com/stretchr/testify v1.8.1
|
github.com/stretchr/testify v1.8.1
|
||||||
github.com/urfave/cli/v2 v2.25.7
|
github.com/urfave/cli/v2 v2.25.7
|
||||||
golang.org/x/crypto v0.14.0
|
golang.org/x/crypto v0.13.0
|
||||||
golang.org/x/oauth2 v0.13.0 // indirect
|
golang.org/x/oauth2 v0.12.0 // indirect
|
||||||
golang.org/x/sync v0.5.0
|
golang.org/x/sync v0.3.0
|
||||||
golang.org/x/term v0.13.0
|
golang.org/x/term v0.12.0
|
||||||
golang.org/x/time v0.4.0
|
golang.org/x/time v0.3.0
|
||||||
google.golang.org/api v0.149.0
|
google.golang.org/api v0.142.0
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -28,18 +28,18 @@ replace github.com/emersion/go-smtp => github.com/emersion/go-smtp v0.17.0 // Pi
|
||||||
require github.com/pkg/errors v0.9.1 // indirect
|
require github.com/pkg/errors v0.9.1 // indirect
|
||||||
|
|
||||||
require (
|
require (
|
||||||
firebase.google.com/go/v4 v4.12.1
|
firebase.google.com/go/v4 v4.12.0
|
||||||
github.com/SherClockHolmes/webpush-go v1.3.0
|
github.com/SherClockHolmes/webpush-go v1.2.0
|
||||||
github.com/prometheus/client_golang v1.17.0
|
github.com/prometheus/client_golang v1.16.0
|
||||||
github.com/stripe/stripe-go/v74 v74.30.0
|
github.com/stripe/stripe-go/v74 v74.30.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.110.10 // indirect
|
cloud.google.com/go v0.110.8 // indirect
|
||||||
cloud.google.com/go/compute v1.23.3 // indirect
|
cloud.google.com/go/compute v1.23.0 // indirect
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||||
cloud.google.com/go/iam v1.1.5 // indirect
|
cloud.google.com/go/iam v1.1.2 // indirect
|
||||||
cloud.google.com/go/longrunning v0.5.4 // indirect
|
cloud.google.com/go/longrunning v0.5.1 // indirect
|
||||||
github.com/AlekSi/pointer v1.2.0 // indirect
|
github.com/AlekSi/pointer v1.2.0 // indirect
|
||||||
github.com/MicahParks/keyfunc v1.9.0 // indirect
|
github.com/MicahParks/keyfunc v1.9.0 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
@ -50,30 +50,31 @@ require (
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
|
github.com/google/go-cmp v0.5.9 // indirect
|
||||||
github.com/google/s2a-go v0.1.7 // indirect
|
github.com/google/s2a-go v0.1.7 // indirect
|
||||||
github.com/google/uuid v1.4.0 // indirect
|
github.com/google/uuid v1.3.1 // indirect
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
|
github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect
|
||||||
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
|
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
|
||||||
github.com/kr/text v0.2.0 // indirect
|
github.com/kr/text v0.2.0 // indirect
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
|
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/prometheus/client_model v0.5.0 // indirect
|
github.com/prometheus/client_model v0.4.0 // indirect
|
||||||
github.com/prometheus/common v0.45.0 // indirect
|
github.com/prometheus/common v0.44.0 // indirect
|
||||||
github.com/prometheus/procfs v0.12.0 // indirect
|
github.com/prometheus/procfs v0.12.0 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
github.com/stretchr/objx v0.5.0 // indirect
|
github.com/stretchr/objx v0.5.0 // indirect
|
||||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
|
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
golang.org/x/net v0.17.0 // indirect
|
golang.org/x/net v0.15.0 // indirect
|
||||||
golang.org/x/sys v0.14.0 // indirect
|
golang.org/x/sys v0.12.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.13.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
google.golang.org/appengine v1.6.8 // indirect
|
||||||
google.golang.org/appengine/v2 v2.0.5 // indirect
|
google.golang.org/appengine/v2 v2.0.5 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
|
google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect
|
||||||
google.golang.org/grpc v1.59.0 // indirect
|
google.golang.org/grpc v1.58.2 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
google.golang.org/protobuf v1.31.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
145
go.sum
145
go.sum
|
@ -1,20 +1,20 @@
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
|
cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME=
|
||||||
cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
|
cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk=
|
||||||
cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=
|
cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
|
||||||
cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI=
|
cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
|
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
|
||||||
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
||||||
cloud.google.com/go/firestore v1.14.0 h1:8aLcKnMPoldYU3YHgu4t2exrKhLQkqaXAGqT0ljrFVw=
|
cloud.google.com/go/firestore v1.13.0 h1:/3S4RssUV4GO/kvgJZB+tayjhOfyAHs+KcpJgRVu/Qk=
|
||||||
cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ=
|
cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8=
|
||||||
cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI=
|
cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4=
|
||||||
cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8=
|
cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU=
|
||||||
cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg=
|
cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tErFDWI=
|
||||||
cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI=
|
cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc=
|
||||||
cloud.google.com/go/storage v1.34.1 h1:H2Af2dU5J0PF7A5B+ECFIce+RqxVnrVilO+cu0TS3MI=
|
cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M=
|
||||||
cloud.google.com/go/storage v1.34.1/go.mod h1:VN1ElqqvR9adg1k9xlkUJ55cMOP1/QjnNNuT5xQL6dY=
|
cloud.google.com/go/storage v1.33.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8=
|
||||||
firebase.google.com/go/v4 v4.12.1 h1:tDNvobifGsx/1HSFLnM0fmNfx/CDZSgsTO2KhZtgpcs=
|
firebase.google.com/go/v4 v4.12.0 h1:I6dCkcWUMFNkFdWgzlf8SLWecQnKdFgJhMv5fT9l1qI=
|
||||||
firebase.google.com/go/v4 v4.12.1/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE=
|
firebase.google.com/go/v4 v4.12.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE=
|
||||||
github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w=
|
github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w=
|
||||||
github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0=
|
github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
@ -22,8 +22,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8
|
||||||
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o=
|
github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o=
|
||||||
github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw=
|
github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw=
|
||||||
github.com/SherClockHolmes/webpush-go v1.3.0 h1:CAu3FvEE9QS4drc3iKNgpBWFfGqNthKlZhp5QpYnu6k=
|
github.com/SherClockHolmes/webpush-go v1.2.0 h1:sGv0/ZWCvb1HUH+izLqrb2i68HuqD/0Y+AmGQfyqKJA=
|
||||||
github.com/SherClockHolmes/webpush-go v1.3.0/go.mod h1:AxRHmJuYwKGG1PVgYzToik1lphQvDnqFYDqimHvwhIw=
|
github.com/SherClockHolmes/webpush-go v1.2.0/go.mod h1:w6X47YApe/B9wUz2Wh8xukxlyupaxSSEbu6yKJcHN2w=
|
||||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
|
@ -31,8 +31,8 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj
|
||||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
@ -46,8 +46,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
|
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
|
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
|
||||||
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
|
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
|
||||||
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
|
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
|
||||||
github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||||
|
@ -78,39 +78,40 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||||
|
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
|
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
|
||||||
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
||||||
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
|
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
|
||||||
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
|
github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ=
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
|
github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
|
||||||
github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
|
github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
|
||||||
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
|
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
|
||||||
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
|
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||||
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
|
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/mattn/go-sqlite3 v1.14.18 h1:JL0eqdCOq6DJVNPSvArO/bIV9/P7fbGrV00LZHc+5aI=
|
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
|
||||||
github.com/mattn/go-sqlite3 v1.14.18/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
|
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
|
||||||
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
|
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||||
github.com/olebedev/when v1.0.0 h1:T2DZCj8HxUhOVxcqaLOmzuTr+iZLtMHsZEim7mjIA2w=
|
github.com/olebedev/when v1.0.0 h1:T2DZCj8HxUhOVxcqaLOmzuTr+iZLtMHsZEim7mjIA2w=
|
||||||
github.com/olebedev/when v1.0.0/go.mod h1:T0THb4kP9D3NNqlvCwIG4GyUioTAzEhB4RNVzig/43E=
|
github.com/olebedev/when v1.0.0/go.mod h1:T0THb4kP9D3NNqlvCwIG4GyUioTAzEhB4RNVzig/43E=
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
|
github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
|
||||||
github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
|
github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
|
github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
|
||||||
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
|
github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
|
||||||
github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
|
github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
|
||||||
github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
|
github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
|
||||||
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
|
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
|
||||||
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
|
||||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||||
|
@ -134,18 +135,17 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsr
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||||
|
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
|
golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
|
||||||
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||||
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
@ -156,20 +156,18 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
|
||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
|
||||||
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
|
||||||
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY=
|
golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
|
||||||
golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0=
|
golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
|
||||||
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||||
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
@ -179,27 +177,21 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
|
||||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
|
||||||
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
|
||||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
|
||||||
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
|
|
||||||
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
||||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
|
|
||||||
golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
|
@ -207,13 +199,12 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
|
||||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
|
||||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
||||||
google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY=
|
google.golang.org/api v0.142.0 h1:mf+7EJ94fi5ZcnpPy+m0Yv2dkz8bKm+UL0snTCuwXlY=
|
||||||
google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI=
|
google.golang.org/api v0.142.0/go.mod h1:zJAN5o6HRqR7O+9qJUFOWrZkYE66RH+efPBdTLA4xBA=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
|
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
|
||||||
|
@ -223,19 +214,19 @@ google.golang.org/appengine/v2 v2.0.5/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
|
google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 h1:vlzZttNJGVqTsRFU9AmdnrcO1Znh8Ew9kCD//yjigk0=
|
||||||
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
|
google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405 h1:HJMDndgxest5n2y77fnErkM62iUsptE/H8p0dC2Huo4=
|
google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg=
|
google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||||
google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
|
google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I=
|
||||||
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
|
google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
|
|
@ -3,7 +3,7 @@ package log
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
2
main.go
2
main.go
|
@ -2,8 +2,8 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/cmd"
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
"heckel.io/ntfy/cmd"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
|
@ -25,9 +25,9 @@ elif [[ "$1" == *.md ]]; then
|
||||||
|
|
||||||
<!-- This file was generated by scripts/emoji-convert.sh -->
|
<!-- This file was generated by scripts/emoji-convert.sh -->
|
||||||
|
|
||||||
You can [tag messages](publish.md#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically
|
You can [tag messages](../publish/#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically
|
||||||
converted to emojis. This is a reference of all supported emojis. To learn more about the feature, please refer to the
|
converted to emojis. This is a reference of all supported emojis. To learn more about the feature, please refer to the
|
||||||
[tagging and emojis page](publish.md#tags-emojis).
|
[tagging and emojis page](../publish/#tags-emojis).
|
||||||
|
|
||||||
<table class=\"remove-md-box emoji-table\"><tr>
|
<table class=\"remove-md-box emoji-table\"><tr>
|
||||||
" > "$1"
|
" > "$1"
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Defines default config settings (excluding limits, see below)
|
// Defines default config settings (excluding limits, see below)
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package server_test
|
package server_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"heckel.io/ntfy/server"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ package server
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,8 @@ package server
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
|
@ -3,8 +3,8 @@ package server
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -2,10 +2,10 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/emersion/go-smtp"
|
"github.com/emersion/go-smtp"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
|
@ -9,9 +9,9 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
_ "github.com/mattn/go-sqlite3" // SQLite driver
|
_ "github.com/mattn/go-sqlite3" // SQLite driver
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -26,13 +26,13 @@ import (
|
||||||
"time"
|
"time"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/emersion/go-smtp"
|
"github.com/emersion/go-smtp"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Server is the main server, providing the UI and API for ntfy
|
// Server is the main server, providing the UI and API for ntfy
|
||||||
|
|
|
@ -2,9 +2,9 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
|
@ -2,10 +2,10 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
|
@ -7,9 +7,9 @@ import (
|
||||||
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"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
|
@ -3,7 +3,7 @@ package server
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type contextKey int
|
type contextKey int
|
||||||
|
|
|
@ -4,9 +4,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stripe/stripe-go/v74"
|
"github.com/stripe/stripe-go/v74"
|
||||||
portalsession "github.com/stripe/stripe-go/v74/billingportal/session"
|
portalsession "github.com/stripe/stripe-go/v74/billingportal/session"
|
||||||
"github.com/stripe/stripe-go/v74/checkout/session"
|
"github.com/stripe/stripe-go/v74/checkout/session"
|
||||||
|
@ -14,6 +11,9 @@ import (
|
||||||
"github.com/stripe/stripe-go/v74/price"
|
"github.com/stripe/stripe-go/v74/price"
|
||||||
"github.com/stripe/stripe-go/v74/subscription"
|
"github.com/stripe/stripe-go/v74/subscription"
|
||||||
"github.com/stripe/stripe-go/v74/webhook"
|
"github.com/stripe/stripe-go/v74/webhook"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
|
|
|
@ -2,12 +2,12 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/mock"
|
"github.com/stretchr/testify/mock"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stripe/stripe-go/v74"
|
"github.com/stripe/stripe-go/v74"
|
||||||
"golang.org/x/time/rate"
|
"golang.org/x/time/rate"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
|
@ -6,8 +6,8 @@ import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
"io"
|
"io"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -22,10 +22,10 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/SherClockHolmes/webpush-go"
|
"github.com/SherClockHolmes/webpush-go"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
|
@ -512,8 +512,6 @@ func TestServer_PublishAtAndPrune(t *testing.T) {
|
||||||
messages := toMessages(t, response.Body.String())
|
messages := toMessages(t, response.Body.String())
|
||||||
require.Equal(t, 1, len(messages)) // Not affected by pruning
|
require.Equal(t, 1, len(messages)) // Not affected by pruning
|
||||||
require.Equal(t, "a message", messages[0].Message)
|
require.Equal(t, "a message", messages[0].Message)
|
||||||
|
|
||||||
time.Sleep(time.Second) // FIXME CI failing not sure why
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestServer_PublishAndMultiPoll(t *testing.T) {
|
func TestServer_PublishAndMultiPoll(t *testing.T) {
|
||||||
|
|
|
@ -4,9 +4,9 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
|
|
@ -7,9 +7,9 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"github.com/SherClockHolmes/webpush-go"
|
"github.com/SherClockHolmes/webpush-go"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -3,9 +3,9 @@ package server
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/user"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
|
|
@ -11,8 +11,8 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mailer interface {
|
type mailer interface {
|
||||||
|
|
|
@ -5,8 +5,8 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -5,10 +5,10 @@ import (
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
// List of possible events
|
// List of possible events
|
||||||
|
|
|
@ -3,7 +3,7 @@ package server
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"io"
|
"io"
|
||||||
"mime"
|
"mime"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
|
@ -2,14 +2,14 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
"heckel.io/ntfy/log"
|
||||||
"git.zio.sh/astra/ntfy/v2/user"
|
"heckel.io/ntfy/user"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"golang.org/x/time/rate"
|
"golang.org/x/time/rate"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -3,7 +3,7 @@ package server
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
"heckel.io/ntfy/util"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ package test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/server"
|
"heckel.io/ntfy/server"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
|
@ -6,11 +6,11 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/mattn/go-sqlite3"
|
"github.com/mattn/go-sqlite3"
|
||||||
"github.com/stripe/stripe-go/v74"
|
"github.com/stripe/stripe-go/v74"
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
|
@ -3,10 +3,10 @@ package user
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"github.com/stripe/stripe-go/v74"
|
"github.com/stripe/stripe-go/v74"
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
|
@ -2,8 +2,8 @@ package user
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"git.zio.sh/astra/ntfy/v2/log"
|
|
||||||
"github.com/stripe/stripe-go/v74"
|
"github.com/stripe/stripe-go/v74"
|
||||||
|
"heckel.io/ntfy/log"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package util_test
|
package util_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.zio.sh/astra/ntfy/v2/util"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"heckel.io/ntfy/util"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<!-- Previews in Google, Slack, WhatsApp, etc. -->
|
<!-- Previews in Google, Slack, WhatsApp, etc. -->
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="ntfy lets you send push notifications via scripts from any computer or phone. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://git.zio.sh/astra/ntfy/v2."
|
content="ntfy lets you send push notifications via scripts from any computer or phone. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy."
|
||||||
/>
|
/>
|
||||||
<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" />
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
<meta property="og:title" content="ntfy web" />
|
<meta property="og:title" content="ntfy web" />
|
||||||
<meta
|
<meta
|
||||||
property="og:description"
|
property="og:description"
|
||||||
content="ntfy lets you send push notifications via scripts from any computer or phone. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://git.zio.sh/astra/ntfy/v2."
|
content="ntfy lets you send push notifications via scripts from any computer or phone. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy."
|
||||||
/>
|
/>
|
||||||
<meta property="og:image" content="/static/images/ntfy.png" />
|
<meta property="og:image" content="/static/images/ntfy.png" />
|
||||||
<meta property="og:url" content="https://ntfy.sh" />
|
<meta property="og:url" content="https://ntfy.sh" />
|
||||||
|
|
892
web/package-lock.json
generated
892
web/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -329,6 +329,5 @@
|
||||||
"publish_dialog_attachment_limits_quota_reached": "يتجاوز الحصة، {{remainingBytes}} متبقية",
|
"publish_dialog_attachment_limits_quota_reached": "يتجاوز الحصة، {{remainingBytes}} متبقية",
|
||||||
"account_basics_tier_paid_until": "تم دفع مبلغ الاشتراك إلى غاية {{date}}، وسيتم تجديده تِلْقائيًا",
|
"account_basics_tier_paid_until": "تم دفع مبلغ الاشتراك إلى غاية {{date}}، وسيتم تجديده تِلْقائيًا",
|
||||||
"account_basics_tier_canceled_subscription": "تم إلغاء اشتراكك وسيتم إعادته إلى مستوى حساب مجاني بداية مِن {{date}}.",
|
"account_basics_tier_canceled_subscription": "تم إلغاء اشتراكك وسيتم إعادته إلى مستوى حساب مجاني بداية مِن {{date}}.",
|
||||||
"account_delete_dialog_billing_warning": "إلغاء حسابك أيضاً يلغي اشتراكك في الفوترة فوراً ولن تتمكن من الوصول إلى لوح الفوترة بعد الآن.",
|
"account_delete_dialog_billing_warning": "إلغاء حسابك أيضاً يلغي اشتراكك في الفوترة فوراً ولن تتمكن من الوصول إلى لوح الفوترة بعد الآن."
|
||||||
"nav_upgrade_banner_description": "حجز المواضيع والمزيد من الرسائل ورسائل البريد الإلكتروني والمرفقات الأكبر حجمًا"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,20 +318,5 @@
|
||||||
"account_upgrade_dialog_tier_features_emails_one": "{{emails}} ел. писмо на ден",
|
"account_upgrade_dialog_tier_features_emails_one": "{{emails}} ел. писмо на ден",
|
||||||
"account_upgrade_dialog_tier_features_emails_other": "{{emails}} ел. писма на ден",
|
"account_upgrade_dialog_tier_features_emails_other": "{{emails}} ел. писма на ден",
|
||||||
"account_upgrade_dialog_tier_features_calls_one": "{{calls}} телефонни обаждания на ден",
|
"account_upgrade_dialog_tier_features_calls_one": "{{calls}} телефонни обаждания на ден",
|
||||||
"account_usage_attachment_storage_description": "{{filesize}} на файл, изтриване след {{expiry}}",
|
"account_usage_attachment_storage_description": "{{filesize}} на файл, изтриване след {{expiry}}"
|
||||||
"account_upgrade_dialog_billing_contact_email": "За въпроси относно плащанията <Link>се свържете с нас</Link>.",
|
|
||||||
"account_upgrade_dialog_tier_current_label": "Текущо",
|
|
||||||
"account_upgrade_dialog_billing_contact_website": "За въпроси относно плащанията се обърнете към <Link>страницата</Link>.",
|
|
||||||
"account_upgrade_dialog_button_cancel_subscription": "Прекратяване на абонамент",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} на файл",
|
|
||||||
"account_upgrade_dialog_reservations_warning_one": "Избраното ниво разрешава по-малко резервирани теми, от колкото текущото. Преди промяна на нивото <strong>изтрийте най-малко една резервирана тема</strong>. Можете да премахвате теми в <Link>Настройки</Link>.",
|
|
||||||
"account_tokens_title": "Кодове за достъп",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_monthly": "{{price}} на година. Плаща се всеки месец.",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_yearly": "{{price}} плащане на година. Спестявате {{save}}.",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} общ обем",
|
|
||||||
"account_upgrade_dialog_tier_price_per_month": "на месец",
|
|
||||||
"account_upgrade_dialog_button_pay_now": "Плащане и абониране",
|
|
||||||
"account_upgrade_dialog_tier_selected_label": "Избрано",
|
|
||||||
"account_upgrade_dialog_button_update_subscription": "Премяна на абонамент",
|
|
||||||
"account_upgrade_dialog_reservations_warning_other": "Избраното ниво разрешава по-малко резервирани теми, от колкото текущото. Преди промяна на нивото <strong>изтрийте най-малко {{count}} резервирани теми</strong>. Можете да премахвате теми в <Link>Настройки</Link>."
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,10 +39,5 @@
|
||||||
"publish_dialog_attach_placeholder": "Atodi ffeil drwy URL, e.e. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Atodi ffeil drwy URL, e.e. https://f-droid.org/F-Droid.apk",
|
||||||
"notifications_click_copy_url_button": "Copio linc",
|
"notifications_click_copy_url_button": "Copio linc",
|
||||||
"notifications_actions_open_url_title": "Ewch i {{url}}",
|
"notifications_actions_open_url_title": "Ewch i {{url}}",
|
||||||
"publish_dialog_email_label": "Ebost",
|
"publish_dialog_email_label": "Ebost"
|
||||||
"signup_form_confirm_password": "Cadarnhau cyfrinair",
|
|
||||||
"signup_form_button_submit": "Cofrestru",
|
|
||||||
"common_back": "Yn ôl",
|
|
||||||
"common_copy_to_clipboard": "Copio i'r clipfwrdd",
|
|
||||||
"signup_already_have_account": "Gyda chyfrif yn barod? Mewngofnodi!"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
"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": "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}}",
|
||||||
|
@ -154,7 +154,7 @@
|
||||||
"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 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",
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
{}
|
|
|
@ -125,7 +125,7 @@
|
||||||
"publish_dialog_priority_default": "Prioridade por defecto",
|
"publish_dialog_priority_default": "Prioridade por defecto",
|
||||||
"publish_dialog_priority_high": "Prioridade alta",
|
"publish_dialog_priority_high": "Prioridade alta",
|
||||||
"publish_dialog_priority_max": "Prioridade Máxima",
|
"publish_dialog_priority_max": "Prioridade Máxima",
|
||||||
"publish_dialog_base_url_label": "URL do servizo",
|
"publish_dialog_base_url_label": "URL de servizo",
|
||||||
"notifications_more_details": "Para máis información, visita o <websiteLink>sitio web</websiteLink> ou le a <docsLink>documentación</docsLink>.",
|
"notifications_more_details": "Para máis información, visita o <websiteLink>sitio web</websiteLink> ou le a <docsLink>documentación</docsLink>.",
|
||||||
"publish_dialog_call_label": "Chamada de teléfono",
|
"publish_dialog_call_label": "Chamada de teléfono",
|
||||||
"publish_dialog_call_reset": "Retirar chamada de teléfono",
|
"publish_dialog_call_reset": "Retirar chamada de teléfono",
|
||||||
|
@ -160,225 +160,5 @@
|
||||||
"publish_dialog_checkbox_publish_another": "Publicar outra",
|
"publish_dialog_checkbox_publish_another": "Publicar outra",
|
||||||
"emoji_picker_search_clear": "Limpar busca",
|
"emoji_picker_search_clear": "Limpar busca",
|
||||||
"publish_dialog_chip_call_no_verified_numbers_tooltip": "Números de teléfono non verificados",
|
"publish_dialog_chip_call_no_verified_numbers_tooltip": "Números de teléfono non verificados",
|
||||||
"publish_dialog_attached_file_remove": "Retirar ficheiro anexo",
|
"publish_dialog_attached_file_remove": "Retirar ficheiro anexo"
|
||||||
"account_upgrade_dialog_tier_features_no_calls": "Sen chamadas",
|
|
||||||
"account_upgrade_dialog_billing_contact_email": "Para preguntas sobre pagamentos, <Link>contacta con nós</Link> directamente.",
|
|
||||||
"account_tokens_dialog_title_create": "Crear token de acceso",
|
|
||||||
"prefs_reservations_dialog_title_edit": "Editar tema reservado",
|
|
||||||
"priority_default": "por defecto",
|
|
||||||
"prefs_notifications_min_priority_title": "Prioridade mínima",
|
|
||||||
"account_upgrade_dialog_tier_features_calls_one": "{{calls}} chamadas de teléfono diarias",
|
|
||||||
"account_upgrade_dialog_tier_current_label": "Actual",
|
|
||||||
"account_tokens_table_token_header": "Token",
|
|
||||||
"prefs_notifications_delete_after_never": "Nunca",
|
|
||||||
"prefs_users_description": "Engadir/eliminar usuarias dos temas protexidos. Ten en conta que as credenciais gárdanse na almacenaxe local do navegador.",
|
|
||||||
"subscribe_dialog_subscribe_description": "Os temas poderían non estar proxetidos con contrasinal, así que elixe un nome complicado de adiviñar. Unha vez subscrita, podes PUT/POST notificacións.",
|
|
||||||
"account_upgrade_dialog_interval_yearly_discount_save_up_to": "aforro ata un {{discount}}%",
|
|
||||||
"account_tokens_dialog_label": "Etiqueta, ex. notificación de Radarr",
|
|
||||||
"account_tokens_table_expires_header": "Caducidade",
|
|
||||||
"account_upgrade_dialog_proration_info": "<strong>Axuste</strong>: ao mellorar a un plan de pagamento superior, a diferencia vaise <strong>cobrar inmediatamente</strong>. Se degradas a conta a un plan inferior a diferencia usarase para pagar futuros períodos de pagamento.",
|
|
||||||
"prefs_reservations_dialog_access_label": "Acceso",
|
|
||||||
"account_usage_attachment_storage_title": "Almacenaxe dos anexos",
|
|
||||||
"prefs_users_dialog_username_label": "Identificador, ex. xoana",
|
|
||||||
"prefs_reservations_table_not_subscribed": "Non subscrita",
|
|
||||||
"account_upgrade_dialog_tier_features_emails_other": "{{emails}} correos diarios",
|
|
||||||
"prefs_notifications_min_priority_max_only": "Só prioridade máxima",
|
|
||||||
"account_upgrade_dialog_tier_features_calls_other": "{{calls}} chamadas de teléfono diarias",
|
|
||||||
"prefs_notifications_sound_description_some": "As notificacións sonan co ton {{sound}} ao chegar",
|
|
||||||
"prefs_reservations_edit_button": "Editar acceso ao tema",
|
|
||||||
"account_tokens_dialog_expires_never": "O token non caduca",
|
|
||||||
"subscribe_dialog_login_title": "Require inciar sesión",
|
|
||||||
"account_tokens_dialog_expires_x_days": "O token caduca en {{days}} días",
|
|
||||||
"prefs_reservations_table_everyone_read_only": "Podo publicar e subscribirme, calquera pode subscribirse",
|
|
||||||
"prefs_reservations_table_everyone_deny_all": "Só eu podo publicar e subscribirme",
|
|
||||||
"account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} tema reservado",
|
|
||||||
"subscribe_dialog_login_button_login": "Acceder",
|
|
||||||
"account_upgrade_dialog_tier_features_no_reservations": "Sen temas reservados",
|
|
||||||
"prefs_users_table_cannot_delete_or_edit": "Non se pode eliminar ou editar unha usuaria coa sesión iniciada",
|
|
||||||
"prefs_notifications_delete_after_three_hours_description": "As notificacións autoelimínanse após tres horas",
|
|
||||||
"prefs_notifications_delete_after_three_hours": "Após tres horas",
|
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Mostrar as notificacións se a prioridade é {{number}} {{name}} ou superior",
|
|
||||||
"reservation_delete_dialog_description": "Ao eliminar a reserva cedes a propiedade do tema, e permites que outras persoas poidan reservalo. Podes manter ou eliminar as mensaxes e anexos existentes.",
|
|
||||||
"prefs_reservations_table_everyone_read_write": "Calquera pode publicar e subscribirse",
|
|
||||||
"prefs_reservations_dialog_title_delete": "Eliminar a reserva do tema",
|
|
||||||
"prefs_users_table": "Táboa de usuarias",
|
|
||||||
"prefs_reservations_table_topic_header": "Tema",
|
|
||||||
"reservation_delete_dialog_submit_button": "Eliminar a reserva",
|
|
||||||
"prefs_reservations_limit_reached": "Acadaches o límite de temas que podes reservar.",
|
|
||||||
"account_upgrade_dialog_interval_monthly": "Mensual",
|
|
||||||
"prefs_users_add_button": "Engadir usuaria",
|
|
||||||
"account_upgrade_dialog_tier_features_messages_other": "{{messages}} mensaxes diarias",
|
|
||||||
"prefs_appearance_language_title": "Idioma",
|
|
||||||
"prefs_notifications_delete_after_one_day_description": "As notificacións autoelimínanse após un día",
|
|
||||||
"account_tokens_table_never_expires": "Non caduca",
|
|
||||||
"account_tokens_delete_dialog_title": "Desbotar token de acceso",
|
|
||||||
"prefs_notifications_delete_after_one_month": "Após un mes",
|
|
||||||
"account_tokens_delete_dialog_description": "Antes de borrar o token de acceso mira que ningunha aplicación ou programa o está usando. <strong>Esta acción non pode desfacerse</strong>.",
|
|
||||||
"account_upgrade_dialog_button_cancel": "Cancelar",
|
|
||||||
"account_tokens_table_label_header": "Etiqueta",
|
|
||||||
"account_upgrade_dialog_billing_contact_website": "Para preguntas sobre pagamentos, vai ao noso <Link>sitiio web</Link>.",
|
|
||||||
"prefs_notifications_delete_after_never_description": "As notificacións non se eliminarán nunca automáticamente",
|
|
||||||
"account_upgrade_dialog_tier_features_reservations_other": "{{reservations}} temas reservados",
|
|
||||||
"prefs_notifications_sound_description_none": "As notificacións non reproducen un ton ao chegar",
|
|
||||||
"account_tokens_description": "Usar tokens de acceso ao publicar e subscribirte a través da API de ntfy, así non tes que enviar as credenciais. Le a <Link>documentación</Link> para saber máis.",
|
|
||||||
"prefs_reservations_table": "Táboa cos temas reservados",
|
|
||||||
"account_upgrade_dialog_button_cancel_subscription": "Cancelar subscrición",
|
|
||||||
"account_upgrade_dialog_tier_features_emails_one": "{{emails}} correo diario",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} por ficheiro",
|
|
||||||
"prefs_reservations_description": "Podes reservar nomes de temas para uso personal. Ao reservar un tema tes a propiedade sobre del, e permíteche definir os permisos de acceso para outras usuarias sobre o tema.",
|
|
||||||
"prefs_users_description_no_sync": "Usuarias e contrasinais non están sincronizados coa túa conta.",
|
|
||||||
"account_tokens_dialog_title_edit": "Editar token de acceso",
|
|
||||||
"prefs_users_table_base_url_header": "URL do servizo",
|
|
||||||
"account_upgrade_dialog_tier_features_messages_one": "{{mensaxes}} mensaxe diaria",
|
|
||||||
"account_upgrade_dialog_reservations_warning_one": "O nivel seleccionado permite reservar menos temas que o nivel actual. Antes de cambiar de nivel, <strong>elimina unha reserva polo menos</strong>. Podes eliminar as reservas nos <Link>Axustes</Link>.",
|
|
||||||
"prefs_users_table_user_header": "Usuaria",
|
|
||||||
"error_boundary_stack_trace": "Trazas do problema",
|
|
||||||
"prefs_users_dialog_password_label": "Contrasinal",
|
|
||||||
"prefs_notifications_delete_after_one_week": "Após unha semana",
|
|
||||||
"prefs_reservations_delete_button": "Restablecer acceso ao tema",
|
|
||||||
"prefs_notifications_delete_after_one_week_description": "As notificacións autoelimínanse após unha semana",
|
|
||||||
"error_boundary_unsupported_indexeddb_description": "A app ntfy web precisa a función IndexedDB, e o teu navegador non ten soporte para IndexedDB no modo privado.<br/><br/>Aínda que é unha mágoa, tampouco ten moito senso usar a app ntfy web en modo privado, porque todo se garda na almacenaxe do navegador. Podes aprender máis sobre isto <githubLink>neste tema de GitHub</githubLink>, ou comentarnos o que che parece en <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>.",
|
|
||||||
"subscribe_dialog_subscribe_button_cancel": "Cancelar",
|
|
||||||
"account_basics_tier_description": "O nivel da túa conta",
|
|
||||||
"prefs_reservations_dialog_title_add": "Reservar tema",
|
|
||||||
"account_upgrade_dialog_cancel_warning": "Isto vai <strong>cancelar a túa subscrición</strong>, e degradar a túa conta o {{date}}. Nesa data, as reservas de temas así como as mensaxes na caché do servidor <strong>van ser eliminadas</strong>.",
|
|
||||||
"prefs_notifications_sound_title": "Ton da notificación",
|
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Prioridade por defecto e superior",
|
|
||||||
"prefs_reservations_table_access_header": "Acceso",
|
|
||||||
"account_tokens_table_copied_to_clipboard": "Copiouse o token de acceso",
|
|
||||||
"account_tokens_dialog_expires_x_hours": "O token caduca en {{hours}} horas",
|
|
||||||
"prefs_users_edit_button": "Editar usuaria",
|
|
||||||
"account_upgrade_dialog_title": "Cambiar facturación da conta",
|
|
||||||
"priority_low": "baixa",
|
|
||||||
"prefs_reservations_table_click_to_subscribe": "Preme para subscribirte",
|
|
||||||
"error_boundary_description": "Isto non debería pasar. Lamentámolo. <br/>Se tes un minuto, <githubLink>informa en GitHub</githubLink>, ou fáinolo saber en <discordLink>Discord</discordLink> ou <matrixLink>Matrix</matrixLink>.",
|
|
||||||
"priority_min": "min",
|
|
||||||
"prefs_notifications_min_priority_description_any": "Mostrar todas as notificacións, obviando a prioridade",
|
|
||||||
"error_boundary_gathering_info": "Obter máis info…",
|
|
||||||
"error_boundary_unsupported_indexeddb_title": "Non hai soporte para a navegación privada",
|
|
||||||
"prefs_notifications_delete_after_one_day": "Após un día",
|
|
||||||
"error_boundary_title": "vaite!, ntfy fallou",
|
|
||||||
"reservation_delete_dialog_action_keep_description": "As mensaxes e anexos que están no servidor serán visibles públicamente para quen saiba o nome do tema.",
|
|
||||||
"prefs_reservations_add_button": "Engadir tema reservado",
|
|
||||||
"prefs_reservations_title": "Temas reservados",
|
|
||||||
"prefs_reservations_dialog_description": "Ao reservar un tema tes a propiedade sobre el, e permíteche definir os permisos de acceso para outras usuarias.",
|
|
||||||
"account_tokens_delete_dialog_submit_button": "Eliminar definitivamente o token",
|
|
||||||
"prefs_notifications_title": "Notificacións",
|
|
||||||
"account_tokens_title": "Tokens de acceso",
|
|
||||||
"prefs_reservations_dialog_topic_label": "Tema",
|
|
||||||
"prefs_users_title": "Xestionar usuarias",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_monthly": "{{price}} anual. Pagamento mensual.",
|
|
||||||
"account_tokens_dialog_expires_unchanged": "Deixar a data de caducidade sen cambiar",
|
|
||||||
"error_boundary_button_copy_stack_trace": "Copiar trazas do problema",
|
|
||||||
"account_tokens_dialog_title_delete": "Eliminar token de acceso",
|
|
||||||
"reservation_delete_dialog_action_keep_title": "Manter as mensaxes e anexos gardados",
|
|
||||||
"prefs_notifications_sound_no_sound": "Sen ton",
|
|
||||||
"account_upgrade_dialog_interval_yearly": "Anual",
|
|
||||||
"account_upgrade_dialog_button_redirect_signup": "Crea unha conta",
|
|
||||||
"account_tokens_dialog_button_cancel": "Cancelar",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_yearly": "{{price}} cobrado anualmente. Aforro {{save}}.",
|
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Prioridade alta e superior",
|
|
||||||
"priority_max": "máx",
|
|
||||||
"prefs_users_delete_button": "Eliminar usuaria",
|
|
||||||
"prefs_notifications_min_priority_any": "Calquera prioridade",
|
|
||||||
"account_tokens_dialog_expires_label": "O token caduca o",
|
|
||||||
"prefs_notifications_delete_after_title": "Desbotar notificacións",
|
|
||||||
"account_upgrade_dialog_interval_yearly_discount_save": "aforro {{discount}}%",
|
|
||||||
"prefs_users_dialog_title_edit": "Editar usuaria",
|
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Prioridade baixa e superior",
|
|
||||||
"account_tokens_dialog_button_update": "Actualizar token",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} almacenaxe total",
|
|
||||||
"prefs_reservations_table_everyone_write_only": "Podo publicar e subscribirme, calquera pode publicar",
|
|
||||||
"prefs_appearance_title": "Aparencia",
|
|
||||||
"account_tokens_table_cannot_delete_or_edit": "Non se pode editar ou desbotar o token da sesión actual",
|
|
||||||
"prefs_notifications_sound_play": "Reproducir ton seleccionado",
|
|
||||||
"account_tokens_table_last_access_header": "Último acceso",
|
|
||||||
"account_tokens_table_last_origin_tooltip": "Desde o enderezo IP {{ip}}, preme para detalles",
|
|
||||||
"account_upgrade_dialog_tier_price_per_month": "mes",
|
|
||||||
"account_tokens_table_current_session": "Sesión do navegador actual",
|
|
||||||
"account_upgrade_dialog_button_pay_now": "Paga e subscríbete",
|
|
||||||
"reservation_delete_dialog_action_delete_title": "Eliminar mensaxes e anexos gardados",
|
|
||||||
"reservation_delete_dialog_action_delete_description": "As mensaxes e anexos vanse borrar definitivamente. Esta acción non ten volta.",
|
|
||||||
"prefs_notifications_delete_after_one_month_description": "As notificacións autoelimínanse após un mes",
|
|
||||||
"prefs_users_dialog_base_url_label": "URL do servizo, ex. https://ntfy.sh",
|
|
||||||
"account_upgrade_dialog_tier_selected_label": "Seleccionado",
|
|
||||||
"account_upgrade_dialog_button_update_subscription": "Actualizar subscrición",
|
|
||||||
"priority_high": "alta",
|
|
||||||
"account_delete_dialog_billing_warning": "Ao eliminar a conta tamén cancelas o pagamento das subscricións. Non poderás volver acceder ao taboleiro de pagamentos.",
|
|
||||||
"prefs_notifications_min_priority_description_max": "Mostrar notificacións se a prioridade é 5 (máx)",
|
|
||||||
"account_upgrade_dialog_reservations_warning_other": "O nivel seleccionado permite reservar menos temas que o nivel actual. Antes de cambiar de nivel, <strong>elimina {{count}} reservas polo menos</strong>. Podes eliminar as reservas nos <Link>Axustes</Link>.",
|
|
||||||
"prefs_users_dialog_title_add": "Engadir usuaria",
|
|
||||||
"account_tokens_dialog_button_create": "Crear token",
|
|
||||||
"account_tokens_table_create_token_button": "Crear token de acceso",
|
|
||||||
"account_basics_tier_interval_monthly": "mensual",
|
|
||||||
"account_basics_tier_canceled_subscription": "A sua suscripción foi cancelada e vostede será degradado a unha conta gratuita o {{date}}.",
|
|
||||||
"account_basics_password_dialog_current_password_incorrect": "Contrasinal incorrecto",
|
|
||||||
"account_basics_phone_numbers_dialog_number_label": "Número de teléfono",
|
|
||||||
"account_basics_password_dialog_button_submit": "Modificar contrasinal",
|
|
||||||
"account_basics_username_title": "Usuario",
|
|
||||||
"account_basics_phone_numbers_dialog_check_verification_button": "Código de confirmación",
|
|
||||||
"account_usage_messages_title": "Mesaxes publicados",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_sms": "Enviar SMS",
|
|
||||||
"account_basics_tier_change_button": "Cambiar",
|
|
||||||
"account_basics_phone_numbers_dialog_description": "Para usar a característica de chamadas de teléfono, vostede debe engadir e verificar ao menos un número de teléfono. A verificación pode ser realizada vía SMS ou a través de chamada.",
|
|
||||||
"account_delete_title": "Borrar conta",
|
|
||||||
"account_delete_dialog_label": "Contrasinal",
|
|
||||||
"account_basics_tier_admin_suffix_with_tier": "(con tier {{tier}})",
|
|
||||||
"subscribe_dialog_login_username_label": "Nome de usuario, ex. phil",
|
|
||||||
"subscribe_dialog_error_user_not_authorized": "Usuario {{username}} non autorizado",
|
|
||||||
"account_basics_title": "Conta",
|
|
||||||
"account_basics_phone_numbers_no_phone_numbers_yet": "Aínda non hay números de teléfono",
|
|
||||||
"subscribe_dialog_subscribe_button_generate_topic_name": "Xerar nome",
|
|
||||||
"subscribe_dialog_login_password_label": "Contrasinal",
|
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Subscribirse",
|
|
||||||
"account_basics_phone_numbers_dialog_title": "Engadir número de teléfono",
|
|
||||||
"account_basics_username_admin_tooltip": "É vostede Admin",
|
|
||||||
"account_delete_dialog_description": "Isto borrará permanentemente a túa conta, incluido todos os datos almacenados no servidor. Despois do borrado, o teu nome de usuario non estará dispoñible durante 7 días. Se realmente queres proceder, por favor confirme co seu contrasinal na caixa inferior.",
|
|
||||||
"account_usage_reservations_none": "Non hai temas reservados para esta conta",
|
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "Nome do tema, ex. phil_alertas",
|
|
||||||
"account_usage_title": "Uso",
|
|
||||||
"account_basics_tier_upgrade_button": "Mexorar a Pro",
|
|
||||||
"subscribe_dialog_error_topic_already_reserved": "Tema xa reservado",
|
|
||||||
"account_basics_tier_admin_suffix_no_tier": "(sen tier)",
|
|
||||||
"account_basics_tier_payment_overdue": "O pago está retrasado. Por favor, revise o seu método de pago o a súa conta será degradada pronto.",
|
|
||||||
"account_basics_phone_numbers_description": "Para notificacións telefónicas",
|
|
||||||
"account_basics_tier_free": "De balde",
|
|
||||||
"account_basics_tier_admin": "Admin",
|
|
||||||
"account_delete_dialog_button_cancel": "Cancelar",
|
|
||||||
"account_basics_password_description": "Modificar o contrasinal da conta",
|
|
||||||
"account_usage_calls_title": "Chamadas realizadas",
|
|
||||||
"account_basics_tier_basic": "Básico",
|
|
||||||
"account_basics_phone_numbers_copied_to_clipboard": "Número de teléfono copiado no portapapeis",
|
|
||||||
"account_basics_tier_title": "Tipo de conta",
|
|
||||||
"account_usage_cannot_create_portal_session": "Non foi posible abrir o portal de pagos",
|
|
||||||
"account_delete_description": "Borrar permanentemente a túa conta",
|
|
||||||
"account_basics_phone_numbers_dialog_number_placeholder": "ex. +1222333444",
|
|
||||||
"account_basics_phone_numbers_dialog_code_placeholder": "ex. 123456",
|
|
||||||
"account_basics_tier_manage_billing_button": "Xestionar pagos",
|
|
||||||
"account_basics_username_description": "Ei, ese eres ti ❤",
|
|
||||||
"account_basics_password_dialog_confirm_password_label": "Confirmar contrasinal",
|
|
||||||
"account_basics_tier_interval_yearly": "anual",
|
|
||||||
"account_delete_dialog_button_submit": "Borrar permanentemente a conta",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_call": "Chamada",
|
|
||||||
"account_basics_password_title": "Contrasinal",
|
|
||||||
"account_basics_password_dialog_new_password_label": "Novo contrasinal",
|
|
||||||
"account_usage_of_limit": "de {{limit}}",
|
|
||||||
"subscribe_dialog_error_user_anonymous": "anónimo",
|
|
||||||
"account_usage_basis_ip_description": "Estadísticas de uso e límites para esta conta están basados na sua IP, polo que poden estar compartidos con outros usuarios. Os limites mostrados son aproximados, basados nos ratios de limite existentes.",
|
|
||||||
"account_basics_password_dialog_title": "Modificar contrasinal",
|
|
||||||
"account_usage_limits_reset_daily": "Límite de uso é reiniciado diariamente a medianoite (UTC(",
|
|
||||||
"account_usage_unlimited": "Sen límites",
|
|
||||||
"account_basics_phone_numbers_title": "Números de teléfono",
|
|
||||||
"account_basics_password_dialog_current_password_label": "Contrasinal actual",
|
|
||||||
"subscribe_dialog_subscribe_base_url_label": "URL do servizo",
|
|
||||||
"account_usage_reservations_title": "Temas reservados",
|
|
||||||
"account_usage_calls_none": "Non se poden realizar chamadas con esta conta",
|
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Usar outro servidor",
|
|
||||||
"account_basics_phone_numbers_dialog_code_label": "Código de verificación",
|
|
||||||
"account_basics_tier_paid_until": "Suscripción pagada ata {{date}}, e vaise auto-renovar",
|
|
||||||
"account_usage_attachment_storage_description": "{{filesize}} por arquivo, borrado despois de {{expiry}}",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_call": "Chámame",
|
|
||||||
"account_usage_emails_title": "Emails enviados",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_sms": "SMS",
|
|
||||||
"subscribe_dialog_login_description": "Este tema está protexido por contrasinal. Por favor, introduza o usuario e contrasinal para subscribirse."
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -268,41 +268,5 @@
|
||||||
"publish_dialog_chip_call_no_verified_numbers_tooltip": "Nessun numero verificato",
|
"publish_dialog_chip_call_no_verified_numbers_tooltip": "Nessun numero verificato",
|
||||||
"account_basics_phone_numbers_title": "Numeri di telefono",
|
"account_basics_phone_numbers_title": "Numeri di telefono",
|
||||||
"account_basics_phone_numbers_dialog_description": "Per usare la funzionalità di notifica tramite chiamata telefonica, devi aggiungere e verificare almeno un numero di telefono. La verifica può essere fatta tramite SMS o chiamata telefonica.",
|
"account_basics_phone_numbers_dialog_description": "Per usare la funzionalità di notifica tramite chiamata telefonica, devi aggiungere e verificare almeno un numero di telefono. La verifica può essere fatta tramite SMS o chiamata telefonica.",
|
||||||
"account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} topic riservato",
|
"account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} topic riservato"
|
||||||
"account_upgrade_dialog_billing_contact_email": "Per domande di fatturazione, <Link>contattaci</Link> direttamente.",
|
|
||||||
"account_upgrade_dialog_tier_current_label": "Attuale",
|
|
||||||
"account_basics_phone_numbers_dialog_number_label": "Numero di telefono",
|
|
||||||
"account_basics_phone_numbers_dialog_check_verification_button": "Conferma codice",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_sms": "Invia SMS",
|
|
||||||
"account_basics_phone_numbers_no_phone_numbers_yet": "Ancora nessun numero di telefono",
|
|
||||||
"account_basics_phone_numbers_dialog_title": "Aggiungi un numero di telefono",
|
|
||||||
"account_upgrade_dialog_button_cancel": "Cancella",
|
|
||||||
"account_upgrade_dialog_billing_contact_website": "Per domande di fatturazione, visita per favore in nostro <Link>sito</Link>.",
|
|
||||||
"account_upgrade_dialog_button_cancel_subscription": "Cancella iscrizione",
|
|
||||||
"account_basics_phone_numbers_description": "Per notifiche via chiamata",
|
|
||||||
"account_basics_phone_numbers_copied_to_clipboard": "Numero di telefono copiato negli appunti",
|
|
||||||
"account_basics_phone_numbers_dialog_number_placeholder": "p. e. +391234567890",
|
|
||||||
"account_basics_phone_numbers_dialog_code_placeholder": "p. e. 123456",
|
|
||||||
"account_tokens_title": "Token d'accesso",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_monthly": "{{price}} all'anno. Addebitato annualmente.",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_call": "Chiama",
|
|
||||||
"account_upgrade_dialog_button_redirect_signup": "Iscriviti ora",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_yearly": "{{price}} addebitato annualmente. Risparmia {{save}}.",
|
|
||||||
"account_upgrade_dialog_tier_price_per_month": "mese",
|
|
||||||
"account_upgrade_dialog_button_pay_now": "Paga ora e isciviti",
|
|
||||||
"account_basics_phone_numbers_dialog_code_label": "Codice di verifica",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_call": "Chiamami",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_sms": "SMS",
|
|
||||||
"account_upgrade_dialog_tier_selected_label": "Selezionato",
|
|
||||||
"account_upgrade_dialog_button_update_subscription": "Aggiorna iscrizione",
|
|
||||||
"account_usage_attachment_storage_title": "Archivio allegati",
|
|
||||||
"account_delete_dialog_description": "Il tuo account sarà permanentemente cancellato assieme a tutti i tuoi dati presenti sul server. Dopo la cancellazione, la tua username non sarà disponibile per 7 giorni. Se desideri davvero procedere, inserisci la tua password nella seguente casella.",
|
|
||||||
"account_delete_dialog_button_cancel": "Annulla",
|
|
||||||
"account_usage_calls_title": "Chiamate effettuate",
|
|
||||||
"account_delete_description": "Elimina permanentemente il tuo account",
|
|
||||||
"account_delete_dialog_button_submit": "Elimina il tuo account permanentemente",
|
|
||||||
"account_usage_basis_ip_description": "Le statistiche di utilizzo e i limiti per questo account sono basati sul tuo indirizzo IP, quindi potrebbero essere in condivisione con altri utenti. I limiti mostrati sopra sono approssimazioni basate sui limiti esistenti.",
|
|
||||||
"account_usage_calls_none": "Questo account non può effettuare chiamate",
|
|
||||||
"account_delete_dialog_billing_warning": "Eliminando il tuo account perderai immediatamente il tuo abbonamento. Non potrai più accedere alla dashboard di fatturazione.",
|
|
||||||
"account_delete_dialog_label": "Password"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -354,7 +354,7 @@
|
||||||
"account_upgrade_dialog_billing_contact_email": "По вопросам оплаты, пожалуйста <Link>свяжитесь с нами</Link>.",
|
"account_upgrade_dialog_billing_contact_email": "По вопросам оплаты, пожалуйста <Link>свяжитесь с нами</Link>.",
|
||||||
"account_upgrade_dialog_billing_contact_website": "По вопросам оплаты, пожалуйста обратитесь к нашему <Link>сайту</Link>.",
|
"account_upgrade_dialog_billing_contact_website": "По вопросам оплаты, пожалуйста обратитесь к нашему <Link>сайту</Link>.",
|
||||||
"publish_dialog_call_reset": "Удалить вызов",
|
"publish_dialog_call_reset": "Удалить вызов",
|
||||||
"account_basics_phone_numbers_dialog_description": "Для того что бы использовать возможность уведомлений о вызовах, нужно добавить и проверить хотя бы один номер телефона. Проверить можно используя SMS или звонок.",
|
"account_basics_phone_numbers_dialog_description": "Для использования уведомлений необходимо добавить и подтвердить хотя бы один номер телефона. Проверить можно используя SMS или звонок.",
|
||||||
"account_basics_phone_numbers_dialog_title": "Добавить номер телефона",
|
"account_basics_phone_numbers_dialog_title": "Добавить номер телефона",
|
||||||
"account_basics_phone_numbers_dialog_number_placeholder": "например +1222333444",
|
"account_basics_phone_numbers_dialog_number_placeholder": "например +1222333444",
|
||||||
"account_basics_phone_numbers_dialog_code_placeholder": "например 123456",
|
"account_basics_phone_numbers_dialog_code_placeholder": "например 123456",
|
||||||
|
@ -363,22 +363,5 @@
|
||||||
"account_usage_calls_none": "Невозможно совершать вызовы с этим аккаунтом",
|
"account_usage_calls_none": "Невозможно совершать вызовы с этим аккаунтом",
|
||||||
"publish_dialog_chip_call_no_verified_numbers_tooltip": "Нет проверенных номеров",
|
"publish_dialog_chip_call_no_verified_numbers_tooltip": "Нет проверенных номеров",
|
||||||
"account_basics_phone_numbers_copied_to_clipboard": "Номер телефона скопирован в буфер обмена",
|
"account_basics_phone_numbers_copied_to_clipboard": "Номер телефона скопирован в буфер обмена",
|
||||||
"account_upgrade_dialog_tier_features_no_calls": "Нет вызовов",
|
"account_upgrade_dialog_tier_features_no_calls": "Нет вызовов"
|
||||||
"account_upgrade_dialog_tier_features_calls_one": "{{calls}} ежедневный звонок",
|
|
||||||
"account_basics_phone_numbers_dialog_number_label": "Номер телефона",
|
|
||||||
"account_basics_phone_numbers_dialog_check_verification_button": "Подтвердить код",
|
|
||||||
"account_upgrade_dialog_tier_features_calls_other": "{{calls}} ежедневных звонков",
|
|
||||||
"account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} зарезервированная тема",
|
|
||||||
"account_basics_phone_numbers_no_phone_numbers_yet": "Телефонных номеров пока нет",
|
|
||||||
"publish_dialog_chip_call_label": "Звонок",
|
|
||||||
"account_upgrade_dialog_tier_features_emails_one": "{{emails}} ежедневное письмо",
|
|
||||||
"account_upgrade_dialog_tier_features_messages_one": "{{messages}} ежедневное сообщения",
|
|
||||||
"account_basics_phone_numbers_description": "Для уведомлений о телефонных звонках",
|
|
||||||
"publish_dialog_call_label": "Звонок",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_call": "Позвонить",
|
|
||||||
"account_basics_phone_numbers_title": "Номера телефонов",
|
|
||||||
"account_basics_phone_numbers_dialog_code_label": "Проверочный код",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_call": "Позвонить мне",
|
|
||||||
"publish_dialog_call_item": "Вызов телефонного номера {{number}}",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_sms": "SMS"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,212 +173,5 @@
|
||||||
"publish_dialog_attach_placeholder": "Pripojiť súbor pomocou URL adresy, napr. https://f-droid.org/F-Droid.apk",
|
"publish_dialog_attach_placeholder": "Pripojiť súbor pomocou URL adresy, napr. https://f-droid.org/F-Droid.apk",
|
||||||
"publish_dialog_chip_email_label": "Preposlanie na email",
|
"publish_dialog_chip_email_label": "Preposlanie na email",
|
||||||
"publish_dialog_chip_attach_file_label": "Pripojiť miestny súbor",
|
"publish_dialog_chip_attach_file_label": "Pripojiť miestny súbor",
|
||||||
"publish_dialog_details_examples_description": "Príklady a podrobný opis všetkých funkcií odosielania nájdete v <docsLink>dokumentácii</docsLink>.",
|
"publish_dialog_details_examples_description": "Príklady a podrobný opis všetkých funkcií odosielania nájdete v <docsLink>dokumentácii</docsLink>."
|
||||||
"account_upgrade_dialog_tier_features_no_calls": "Žiadne telefonáty",
|
|
||||||
"account_upgrade_dialog_billing_contact_email": "V prípade otázok týkajúcich sa fakturácie nás prosím <Link>kontaktujte tu</Link>.",
|
|
||||||
"account_tokens_dialog_title_create": "Vytvoriť prístupový token",
|
|
||||||
"prefs_reservations_dialog_title_edit": "Upraviť rezervovanú tému",
|
|
||||||
"account_basics_tier_interval_monthly": "mesačne",
|
|
||||||
"account_basics_tier_canceled_subscription": "Vaše predplatné bolo zrušené a bude preradené na bezplatné konto k dátumu {{date}}.",
|
|
||||||
"priority_default": "predvolená",
|
|
||||||
"prefs_notifications_min_priority_title": "Najnižšia priorita",
|
|
||||||
"account_upgrade_dialog_tier_features_calls_one": "{{calls}} denný telefonát",
|
|
||||||
"account_upgrade_dialog_tier_current_label": "Aktuálne",
|
|
||||||
"account_basics_password_dialog_current_password_incorrect": "Nesprávne heslo",
|
|
||||||
"account_tokens_table_token_header": "Token",
|
|
||||||
"prefs_notifications_delete_after_never": "Nikdy",
|
|
||||||
"prefs_users_description": "Tu môžete pridávať/odstraňovať používateľov pre svoje chránené témy. Upozorňujeme, že používateľské meno a heslo sú uložené v lokálnom úložisku prehliadača.",
|
|
||||||
"account_basics_phone_numbers_dialog_number_label": "Telefónne číslo",
|
|
||||||
"subscribe_dialog_subscribe_description": "Témy nemusia byť chránené heslom, preto vyberte názov, ktorý nie je ľahké uhádnuť. Po prihlásení sa na odber môžete PUT/POST oznámenia.",
|
|
||||||
"account_basics_password_dialog_button_submit": "Zmeniť heslo",
|
|
||||||
"account_basics_phone_numbers_dialog_check_verification_button": "Potvrdiť kód",
|
|
||||||
"account_upgrade_dialog_interval_yearly_discount_save_up_to": "ušetrite až {{discount}}%",
|
|
||||||
"account_tokens_dialog_label": "Označenie, napr. Radarr notifications",
|
|
||||||
"account_tokens_table_expires_header": "Vyprší",
|
|
||||||
"account_upgrade_dialog_proration_info": "<strong>Vyhlásenie</strong>: Pri prechode medzi platenými plánmi sa rozdiel v cene <strong>účtuje okamžite</strong>. Pri prechode na nižšiu úroveň sa zostatok použije na platbu za budúce fakturačné obdobia.",
|
|
||||||
"prefs_reservations_dialog_access_label": "Prístup",
|
|
||||||
"account_usage_attachment_storage_title": "Ukladanie príloh",
|
|
||||||
"prefs_users_dialog_username_label": "Používateľské meno, napr. phil",
|
|
||||||
"account_usage_messages_title": "Zverejnené správy",
|
|
||||||
"emoji_picker_search_clear": "Vymazať vyhľadávanie",
|
|
||||||
"prefs_reservations_table_not_subscribed": "Odber nie je prihlásený",
|
|
||||||
"account_upgrade_dialog_tier_features_emails_other": "{{emails}} denné emaily",
|
|
||||||
"prefs_notifications_min_priority_max_only": "Iba najvyššia priorita",
|
|
||||||
"account_upgrade_dialog_tier_features_calls_other": "{{calls}} denné telefonáty",
|
|
||||||
"prefs_notifications_sound_description_some": "Oznámenia pri príchode prehrávajú zvuk {{sound}}",
|
|
||||||
"prefs_reservations_edit_button": "Upraviť prístup k téme",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_sms": "Poslať SMS",
|
|
||||||
"account_basics_tier_change_button": "Zmeniť",
|
|
||||||
"account_tokens_dialog_expires_never": "Platnosť tokenu nikdy nevyprší",
|
|
||||||
"subscribe_dialog_login_title": "Vyžaduje sa prihlásenie",
|
|
||||||
"account_tokens_dialog_expires_x_days": "Token vyprší za {{days}} dní",
|
|
||||||
"prefs_reservations_table_everyone_read_only": "Môžem publikovať a odoberať, každý môže odoberať",
|
|
||||||
"prefs_reservations_table_everyone_deny_all": "Iba ja môžem publikovať a odoberať",
|
|
||||||
"account_basics_phone_numbers_dialog_description": "Ak chcete používať funkciu oznamovanie hovorom, musíte pridať a overiť aspoň jedno telefónne číslo. Overenie je možné vykonať prostredníctvom SMS alebo telefonického hovoru.",
|
|
||||||
"account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} rezervovaná téma",
|
|
||||||
"account_delete_title": "Odstrániť účet",
|
|
||||||
"subscribe_dialog_login_button_login": "Prihlásenie",
|
|
||||||
"account_upgrade_dialog_tier_features_no_reservations": "Žiadne rezervované témy",
|
|
||||||
"prefs_users_table_cannot_delete_or_edit": "Nie je možné odstrániť alebo upraviť prihláseného používateľa",
|
|
||||||
"account_basics_tier_admin_suffix_with_tier": "(s úrovňou {{tier}})",
|
|
||||||
"prefs_notifications_delete_after_three_hours_description": "Oznámenia sa automaticky odstránia po troch hodinách",
|
|
||||||
"prefs_notifications_delete_after_three_hours": "Po troch hodinách",
|
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "Zobraziť oznámenia, ak je priorita {{number}} ({{name}}) alebo vyššia",
|
|
||||||
"reservation_delete_dialog_description": "Odstránením rezervácie sa vzdáte vlastníctva témy a umožníte ostatným, aby si ju rezervovali. Existujúce správy a prílohy si môžete ponechať alebo odstrániť.",
|
|
||||||
"subscribe_dialog_login_username_label": "Používateľské meno, napr. phil",
|
|
||||||
"subscribe_dialog_error_user_not_authorized": "Používateľ {{username}} nie je autorizovaný",
|
|
||||||
"prefs_reservations_table_everyone_read_write": "Každý môže publikovať a odoberať",
|
|
||||||
"prefs_reservations_dialog_title_delete": "Odstrániť rezervovanú tému",
|
|
||||||
"prefs_users_table": "Tabuľka používateľov",
|
|
||||||
"prefs_reservations_table_topic_header": "Téma",
|
|
||||||
"reservation_delete_dialog_submit_button": "Vymazať rezerváciu",
|
|
||||||
"prefs_reservations_limit_reached": "Dosiahli ste limit rezervovaných tém.",
|
|
||||||
"account_upgrade_dialog_interval_monthly": "Mesačne",
|
|
||||||
"prefs_users_add_button": "Pridať používateľa",
|
|
||||||
"account_upgrade_dialog_tier_features_messages_other": "{{messages}} denné správy",
|
|
||||||
"account_basics_phone_numbers_no_phone_numbers_yet": "Zatiaľ žiadne telefónne čísla",
|
|
||||||
"subscribe_dialog_subscribe_button_generate_topic_name": "Vygenerovať názov",
|
|
||||||
"prefs_appearance_language_title": "Jazyk",
|
|
||||||
"prefs_notifications_delete_after_one_day_description": "Oznámenia sa automaticky odstránia po jednom dni",
|
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "Odoberať",
|
|
||||||
"account_tokens_table_never_expires": "Nikdy nevyprší",
|
|
||||||
"account_tokens_delete_dialog_title": "Odstrániť prístupový token",
|
|
||||||
"prefs_notifications_delete_after_one_month": "Po jednom mesiaci",
|
|
||||||
"account_basics_phone_numbers_dialog_title": "Pridať telefónne číslo",
|
|
||||||
"account_tokens_delete_dialog_description": "Pred odstránením prístupového tokenu sa uistite, že ho aktívne nepoužívajú žiadne aplikácie ani skripty. <strong>Túto akciu nie je možné vrátiť späť</strong>.",
|
|
||||||
"account_tokens_table_label_header": "Označenie",
|
|
||||||
"account_upgrade_dialog_billing_contact_website": "Otázky týkajúce sa fakturácie nájdete na našej <Link>webovej stránke</Link>.",
|
|
||||||
"account_basics_username_admin_tooltip": "Ste Admin",
|
|
||||||
"prefs_notifications_delete_after_never_description": "Oznámenia sa nikdy automaticky neodstránia",
|
|
||||||
"account_delete_dialog_description": "Tým sa vaše konto natrvalo odstráni vrátane všetkých údajov uložených na serveri. Po vymazaní bude vaše používateľské meno 7 dní nedostupné. Ak naozaj chcete pokračovať, potvrďte svoje heslo v poli nižšie.",
|
|
||||||
"account_upgrade_dialog_tier_features_reservations_other": "{{reservations}} rezervované témy",
|
|
||||||
"account_usage_reservations_none": "Žiadne rezervované témy pre toto konto",
|
|
||||||
"prefs_notifications_sound_description_none": "Pri príchode oznámení sa neprehráva žiadny zvuk",
|
|
||||||
"account_tokens_description": "Pri publikovaní a prihlasovaní prostredníctvom rozhrania ntfy API používajte prístupové tokeny, aby ste nemuseli posielať prihlasovacie údaje k účtu. Viacej informácií nájdete v <Link>dokumentácií</Link>.",
|
|
||||||
"prefs_reservations_table": "Tabuľka rezervovaných tém",
|
|
||||||
"emoji_picker_search_placeholder": "Vyhľadať emoji",
|
|
||||||
"account_upgrade_dialog_button_cancel_subscription": "Zrušiť predplatné",
|
|
||||||
"account_upgrade_dialog_tier_features_emails_one": "{{emails}} denný email",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} na jeden súbor",
|
|
||||||
"prefs_reservations_description": "Tu si môžete rezervovať názvy tém na osobné použitie. Rezervovaním témy získate vlastníctvo nad témou a môžete definovať prístupové práva pre ostatných používateľov k téme.",
|
|
||||||
"account_usage_title": "Používanie",
|
|
||||||
"account_basics_tier_upgrade_button": "Vylepšiť na PRO verziu",
|
|
||||||
"prefs_users_description_no_sync": "Používatelia a heslá nie sú synchronizované s vaším účtom.",
|
|
||||||
"account_tokens_dialog_title_edit": "Upraviť prístupový token",
|
|
||||||
"account_upgrade_dialog_tier_features_messages_one": "{{messages}} denná správa",
|
|
||||||
"account_upgrade_dialog_reservations_warning_one": "Vybraná úroveň umožňuje menej rezervovaných tém ako vaša aktuálna úroveň. Pred zmenou úrovne <strong>vymažte aspoň jednu rezerváciu</strong>. Rezervácie môžete odstrániť v <Link>Nastaveniach</Link>.",
|
|
||||||
"subscribe_dialog_error_topic_already_reserved": "Téma je už rezervovaná",
|
|
||||||
"prefs_users_table_user_header": "Používateľ",
|
|
||||||
"error_boundary_stack_trace": "Výpis zásobníka",
|
|
||||||
"prefs_notifications_delete_after_one_week": "Po jednom týždni",
|
|
||||||
"prefs_reservations_delete_button": "Resetovať prístup k téme",
|
|
||||||
"account_basics_tier_admin_suffix_no_tier": "(bez úrovne)",
|
|
||||||
"prefs_notifications_delete_after_one_week_description": "Oznámenia sa automaticky odstránia po jednom týždni",
|
|
||||||
"error_boundary_unsupported_indexeddb_description": "Webová aplikácia ntfy potrebuje na fungovanie IndexedDB a váš prehliadač nepodporuje IndexedDB v režime súkromného prehliadania.<br/><br/>Je to síce nešťastné, ale aj tak nemá veľký zmysel používať webovú aplikáciu ntfy v režime súkromného prehliadania, pretože všetko je uložené v úložisku prehliadača. Viac informácií si môžete prečítať <githubLink>v tomto probléme GitHubu</githubLink> alebo sa s nami porozprávať na <discordLink>Discord</discordLink> alebo <matrixLink>Matrix</matrixLink>.",
|
|
||||||
"account_basics_tier_payment_overdue": "Vaša platba je po termíne splatnosti. Aktualizujte prosím svoj spôsob platby, inak bude váš účet preradený do nižšej kategórie.",
|
|
||||||
"account_basics_tier_description": "Úroveň výkonu vášho účtu",
|
|
||||||
"account_basics_phone_numbers_description": "Pre oznamovanie hovorom",
|
|
||||||
"account_basics_tier_free": "Zadarmo",
|
|
||||||
"account_upgrade_dialog_cancel_warning": "Týmto <strong>zrušíte svoje predplatné</strong> a {{date}} prejdete na nižšiu úroveň svojho účtu. V tento deň <strong>budú odstránené</strong> rezervácie tém, ako aj správy uložené vo vyrovnávacej pamäti servera.",
|
|
||||||
"account_basics_tier_admin": "Admin",
|
|
||||||
"prefs_notifications_sound_title": "Zvuk oznámenia",
|
|
||||||
"prefs_notifications_min_priority_default_and_higher": "Predvolená priorita a vyššia",
|
|
||||||
"prefs_reservations_table_access_header": "Prístup",
|
|
||||||
"account_tokens_table_copied_to_clipboard": "Prístupový token skopírovaný",
|
|
||||||
"account_tokens_dialog_expires_x_hours": "Token vyprší za {{hours}} hodín",
|
|
||||||
"prefs_users_edit_button": "Upraviť používateľa",
|
|
||||||
"account_upgrade_dialog_title": "Zmeniť úroveň účtu",
|
|
||||||
"priority_low": "nízka",
|
|
||||||
"prefs_reservations_table_click_to_subscribe": "Kliknutím sa prihlásite na odber",
|
|
||||||
"account_basics_password_description": "Zmeniť heslo účtu",
|
|
||||||
"account_usage_calls_title": "Uskutočnené telefonické hovory",
|
|
||||||
"error_boundary_description": "Toto samozrejme nemalo nastať. Je mi to veľmi ľúto.<br/>Ak máte chvíľu, <githubLink>nahláste to na GitHub</githubLink> alebo nám dajte vedieť cez <discordLink>Discord</discordLink> alebo <matrixLink>Matrix</matrixLink>.",
|
|
||||||
"priority_min": "najnižšia",
|
|
||||||
"account_basics_tier_basic": "Základný",
|
|
||||||
"prefs_notifications_min_priority_description_any": "Zobraziť všetky oznámenia bez ohľadu na prioritu",
|
|
||||||
"error_boundary_gathering_info": "Získajte viac informácií…",
|
|
||||||
"error_boundary_unsupported_indexeddb_title": "Súkromné prehliadanie nie je podporované",
|
|
||||||
"prefs_notifications_delete_after_one_day": "Po jednom dni",
|
|
||||||
"error_boundary_title": "Ale nie, ntfy prestalo fungovať",
|
|
||||||
"reservation_delete_dialog_action_keep_description": "Správy a prílohy, ktoré sú uložené v medzipamäti na serveri, budú verejne viditeľné pre ľudí, ktorí poznajú názov témy.",
|
|
||||||
"prefs_reservations_add_button": "Pridať rezervovanú tému",
|
|
||||||
"prefs_reservations_title": "Rezervované témy",
|
|
||||||
"account_basics_phone_numbers_copied_to_clipboard": "Telefónne číslo skopírované do schránky",
|
|
||||||
"prefs_reservations_dialog_description": "Rezervovaním témy získate vlastníctvo nad témou a môžete definovať prístupové práva pre ostatných používateľov k téme.",
|
|
||||||
"account_basics_tier_title": "Typ účtu",
|
|
||||||
"account_usage_cannot_create_portal_session": "Nemožnosť otvoriť fakturačný portál",
|
|
||||||
"account_tokens_delete_dialog_submit_button": "Trvalo odstrániť token",
|
|
||||||
"account_delete_description": "Natrvalo odstrániť vaše konto",
|
|
||||||
"account_basics_phone_numbers_dialog_number_placeholder": "napr. +1222333444",
|
|
||||||
"account_basics_phone_numbers_dialog_code_placeholder": "napr. 123456",
|
|
||||||
"prefs_notifications_title": "Oznámenia",
|
|
||||||
"account_basics_tier_manage_billing_button": "Spravovať fakturáciu",
|
|
||||||
"account_tokens_title": "Prístupové tokeny",
|
|
||||||
"account_basics_username_description": "Hej, to si ty ❤",
|
|
||||||
"prefs_reservations_dialog_topic_label": "Téma",
|
|
||||||
"prefs_users_title": "Správa používateľov",
|
|
||||||
"account_basics_tier_interval_yearly": "ročne",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_monthly": "{{price}} za rok. Účtuje sa mesačne.",
|
|
||||||
"account_delete_dialog_button_submit": "Natrvalo odstrániť konto",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_call": "Hovor",
|
|
||||||
"account_basics_password_dialog_new_password_label": "Nové heslo",
|
|
||||||
"account_tokens_dialog_expires_unchanged": "Ponechať dátum skončenia platnosti nezmenený",
|
|
||||||
"error_boundary_button_copy_stack_trace": "Kopírovať výpis zásobníka",
|
|
||||||
"account_tokens_dialog_title_delete": "Odstrániť prístupový token",
|
|
||||||
"account_usage_of_limit": "z {{limit}}",
|
|
||||||
"reservation_delete_dialog_action_keep_title": "Ponechať správy a prílohy uložené v medzipamäti",
|
|
||||||
"prefs_notifications_sound_no_sound": "Bez zvuku",
|
|
||||||
"account_upgrade_dialog_interval_yearly": "Ročne",
|
|
||||||
"account_upgrade_dialog_button_redirect_signup": "Zaregistrujte sa teraz",
|
|
||||||
"subscribe_dialog_error_user_anonymous": "anonymný",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_yearly": "{{price}} účtovaná ročne. Uložiť {{save}}.",
|
|
||||||
"prefs_notifications_min_priority_high_and_higher": "Vysoká priorita a vyššia",
|
|
||||||
"account_usage_basis_ip_description": "Štatistiky a limity používania tohto účtu sú založené na vašej IP adrese, takže môžu byť zdieľané s ostatnými používateľmi. Vyššie uvedené limity sú približné hodnoty založené na existujúcich rýchlostných limitoch.",
|
|
||||||
"account_basics_password_dialog_title": "Zmeniť heslo",
|
|
||||||
"priority_max": "najvyššia",
|
|
||||||
"account_usage_limits_reset_daily": "Limity používania sa obnovujú denne o polnoci (UTC)",
|
|
||||||
"account_usage_unlimited": "Nekonečné",
|
|
||||||
"prefs_users_delete_button": "Odstrániť používateľa",
|
|
||||||
"prefs_notifications_min_priority_any": "Akákoľvek priorita",
|
|
||||||
"account_tokens_dialog_expires_label": "Platnosť prístupového tokenu vyprší za",
|
|
||||||
"account_basics_phone_numbers_title": "Telefónne čísla",
|
|
||||||
"prefs_notifications_delete_after_title": "Odstrániť oznámenia",
|
|
||||||
"account_upgrade_dialog_interval_yearly_discount_save": "ušetríte {{discount}}%",
|
|
||||||
"prefs_users_dialog_title_edit": "Upraviť používateľa",
|
|
||||||
"account_basics_password_dialog_current_password_label": "Aktuálne heslo",
|
|
||||||
"prefs_notifications_min_priority_low_and_higher": "Nízka priorita a vyššia",
|
|
||||||
"account_tokens_dialog_button_update": "Aktualizovať token",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} celkový úložný priestor",
|
|
||||||
"prefs_reservations_table_everyone_write_only": "Môžem publikovať a odoberať, každý môže publikovať",
|
|
||||||
"prefs_appearance_title": "Vzhlad",
|
|
||||||
"account_tokens_table_cannot_delete_or_edit": "Nie je možné upraviť alebo odstrániť aktuálny token relácie",
|
|
||||||
"prefs_notifications_sound_play": "Prehrať vybraný zvuk",
|
|
||||||
"account_tokens_table_last_access_header": "Posledný prístup",
|
|
||||||
"account_tokens_table_last_origin_tooltip": "Z IP adresy {{ip}}, kliknite na vyhľadávanie",
|
|
||||||
"account_usage_reservations_title": "Rezervované témy",
|
|
||||||
"account_upgrade_dialog_tier_price_per_month": "mesiac",
|
|
||||||
"account_usage_calls_none": "S týmto účtom nie je možné uskutočňovať žiadne telefonické hovory",
|
|
||||||
"account_tokens_table_current_session": "Aktuálna relácia prehliadača",
|
|
||||||
"account_upgrade_dialog_button_pay_now": "Zaplatiť a predplatiť si",
|
|
||||||
"subscribe_dialog_subscribe_use_another_label": "Použiť iný server",
|
|
||||||
"reservation_delete_dialog_action_delete_title": "Odstrániť správy a prílohy uložené v medzipamäti",
|
|
||||||
"account_basics_phone_numbers_dialog_code_label": "Overovací kód",
|
|
||||||
"reservation_delete_dialog_action_delete_description": "Správy a prílohy uložené v medzipamäti sa natrvalo vymažú. Túto akciu nemožno vrátiť späť.",
|
|
||||||
"account_basics_tier_paid_until": "Predplatné zaplatené do {{date}} s automatickou obnovou",
|
|
||||||
"account_usage_attachment_storage_description": "{{filesize}} na súbor, vymazaný po {{expiry}}",
|
|
||||||
"prefs_notifications_delete_after_one_month_description": "Oznámenia sa automaticky odstránia po jednom mesiaci",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_call": "Zavolajte mi",
|
|
||||||
"prefs_users_dialog_base_url_label": "URL adresa služby, napr. https://ntfy.sh",
|
|
||||||
"account_usage_emails_title": "Odoslané emaily",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_sms": "SMS",
|
|
||||||
"account_upgrade_dialog_tier_selected_label": "Vybrané",
|
|
||||||
"account_upgrade_dialog_button_update_subscription": "Aktualizovať predplatné",
|
|
||||||
"priority_high": "vysoká",
|
|
||||||
"account_delete_dialog_billing_warning": "Odstránením konta sa okamžite zruší aj vaše fakturačné predplatné. Už nebudete mať prístup k fakturačnému panelu.",
|
|
||||||
"prefs_notifications_min_priority_description_max": "Zobraziť oznámenia, ak je priorita 5 (max)",
|
|
||||||
"subscribe_dialog_login_description": "Táto téma je chránená heslom. Ak sa chcete prihlásiť na odber témy, zadajte používateľské meno a heslo.",
|
|
||||||
"account_upgrade_dialog_reservations_warning_other": "Vybraná úroveň umožňuje menej rezervovaných tém ako vaša aktuálna úroveň. Pred zmenou úrovne <strong>vymažte aspoň {{count}} rezervácií</strong>. Rezervácie môžete odstrániť v <Link>Nastaveniach</Link>.",
|
|
||||||
"prefs_users_dialog_title_add": "Pridať používateľa",
|
|
||||||
"account_tokens_dialog_button_create": "Vytvoriť token",
|
|
||||||
"account_tokens_table_create_token_button": "Vytvoriť prístupový token"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
"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": "Varsayılan ö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.",
|
||||||
|
|
|
@ -1,407 +1,408 @@
|
||||||
{
|
{
|
||||||
"account_basics_password_description": "更改你的帳戶密碼",
|
"action_bar_show_menu": "顯示選單",
|
||||||
"account_basics_password_dialog_button_submit": "更改密碼",
|
|
||||||
"account_basics_password_dialog_confirm_password_label": "確認密碼",
|
|
||||||
"account_basics_password_dialog_current_password_incorrect": "密碼錯誤",
|
|
||||||
"account_basics_password_dialog_current_password_label": "當前密碼",
|
|
||||||
"account_basics_password_dialog_new_password_label": "新密碼",
|
|
||||||
"account_basics_password_dialog_title": "更改密碼",
|
|
||||||
"account_basics_password_title": "密碼",
|
|
||||||
"account_basics_phone_numbers_copied_to_clipboard": "電話號碼已複製到剪貼板",
|
|
||||||
"account_basics_phone_numbers_description": "電話通知",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_call": "撥打",
|
|
||||||
"account_basics_phone_numbers_dialog_channel_sms": "短信",
|
|
||||||
"account_basics_phone_numbers_dialog_check_verification_button": "確認碼",
|
|
||||||
"account_basics_phone_numbers_dialog_code_label": "驗證碼",
|
|
||||||
"account_basics_phone_numbers_dialog_code_placeholder": "例如:123456",
|
|
||||||
"account_basics_phone_numbers_dialog_description": "要使用來電通知功能,你需要新增並驗證至少一個電話號碼。可以通過短信或電話驗證。",
|
|
||||||
"account_basics_phone_numbers_dialog_number_label": "電話號碼",
|
|
||||||
"account_basics_phone_numbers_dialog_number_placeholder": "例如:+1222333444",
|
|
||||||
"account_basics_phone_numbers_dialog_title": "新增電話號碼",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_call": "撥打電話",
|
|
||||||
"account_basics_phone_numbers_dialog_verify_button_sms": "發送資訊",
|
|
||||||
"account_basics_phone_numbers_no_phone_numbers_yet": "無可執行的電話號碼",
|
|
||||||
"account_basics_phone_numbers_title": "電話號碼",
|
|
||||||
"account_basics_tier_admin_suffix_no_tier": "(無等級)",
|
|
||||||
"account_basics_tier_admin_suffix_with_tier": "(有 {{tier}} 等級)",
|
|
||||||
"account_basics_tier_admin": "管理員",
|
|
||||||
"account_basics_tier_basic": "基礎版",
|
|
||||||
"account_basics_tier_canceled_subscription": "你的訂閱已取消,並將在 {{date}} 降級為免費帳戶。",
|
|
||||||
"account_basics_tier_change_button": "改變",
|
|
||||||
"account_basics_tier_description": "你帳戶的權限級別",
|
|
||||||
"account_basics_tier_free": "免費",
|
|
||||||
"account_basics_tier_interval_monthly": "每月",
|
|
||||||
"account_basics_tier_interval_yearly": "每年",
|
|
||||||
"account_basics_tier_manage_billing_button": "管理計費",
|
|
||||||
"account_basics_tier_paid_until": "訂閱已支付至 {{date}},並將自動續訂",
|
|
||||||
"account_basics_tier_payment_overdue": "你的付款已逾期。請更新你的付款方式,否則你的帳戶將很快被降級。",
|
|
||||||
"account_basics_tier_title": "帳戶類型",
|
|
||||||
"account_basics_tier_upgrade_button": "升級到專業版",
|
|
||||||
"account_basics_title": "帳戶",
|
|
||||||
"account_basics_username_admin_tooltip": "你是管理員",
|
|
||||||
"account_basics_username_description": "嘿,那是你 ❤",
|
|
||||||
"account_basics_username_title": "用戶名",
|
|
||||||
"account_delete_description": "永久刪除你的帳戶",
|
|
||||||
"account_delete_dialog_billing_warning": "刪除你的帳戶也會立即取消你的計費訂閱。你將無法再訪問計費儀錶板。",
|
|
||||||
"account_delete_dialog_button_cancel": "取消",
|
|
||||||
"account_delete_dialog_button_submit": "永久刪除帳戶",
|
|
||||||
"account_delete_dialog_description": "這將永久刪除你的帳戶,包括存儲在伺服器上的所有數據。刪除後,你的用戶名將在 7 天內不可用。如果你真的想繼續,請在下面的框中使用你的密碼作確認。",
|
|
||||||
"account_delete_dialog_label": "密碼",
|
|
||||||
"account_delete_title": "刪除帳戶",
|
|
||||||
"account_tokens_delete_dialog_description": "在刪除訪問令牌之前,請確保沒有應用程序或腳本正在活躍使用它。 <strong>此操作無法撤銷</strong>。",
|
|
||||||
"account_tokens_delete_dialog_submit_button": "永久删除令牌",
|
|
||||||
"account_tokens_delete_dialog_title": "刪除訪問令牌",
|
|
||||||
"account_tokens_description": "通過 ntfy API 發布和訂閱時使用訪問令牌,因此你不必發送你的帳戶憑證。查看<Link>文檔</Link>以了解更多資訊。",
|
|
||||||
"account_tokens_dialog_button_cancel": "取消",
|
|
||||||
"account_tokens_dialog_button_create": "創建令牌",
|
|
||||||
"account_tokens_dialog_button_update": "更新令牌",
|
|
||||||
"account_tokens_dialog_expires_label": "訪問令牌過期於",
|
|
||||||
"account_tokens_dialog_expires_never": "令牌永不過期",
|
|
||||||
"account_tokens_dialog_expires_unchanged": "保持過期日期不變",
|
|
||||||
"account_tokens_dialog_expires_x_days": "令牌在 {{days}} 天後過期",
|
|
||||||
"account_tokens_dialog_expires_x_hours": "令牌在 {{hours}} 小時後過期",
|
|
||||||
"account_tokens_dialog_label": "標籤,例如:Radarr 通知",
|
|
||||||
"account_tokens_dialog_title_create": "創建訪問令牌",
|
|
||||||
"account_tokens_dialog_title_delete": "刪除訪問令牌",
|
|
||||||
"account_tokens_dialog_title_edit": "編輯訪問令牌",
|
|
||||||
"account_tokens_table_cannot_delete_or_edit": "無法編輯或刪除當前會話令牌",
|
|
||||||
"account_tokens_table_copied_to_clipboard": "已複製訪問令牌",
|
|
||||||
"account_tokens_table_create_token_button": "創建訪問令牌",
|
|
||||||
"account_tokens_table_current_session": "當前瀏覽器會話",
|
|
||||||
"account_tokens_table_expires_header": "過期",
|
|
||||||
"account_tokens_table_label_header": "標籤",
|
|
||||||
"account_tokens_table_last_access_header": "最後訪問",
|
|
||||||
"account_tokens_table_last_origin_tooltip": "於IP地址 {{ip}},點擊查找",
|
|
||||||
"account_tokens_table_never_expires": "永不過期",
|
|
||||||
"account_tokens_table_token_header": "令牌",
|
|
||||||
"account_tokens_title": "訪問令牌",
|
|
||||||
"account_upgrade_dialog_billing_contact_email": "有關賬單問題,請直接<Link>聯繫我們 </Link>。",
|
|
||||||
"account_upgrade_dialog_billing_contact_website": "有關賬單問題,請參考我們的<Link>網站 </Link>。",
|
|
||||||
"account_upgrade_dialog_button_cancel_subscription": "取消訂閱",
|
|
||||||
"account_upgrade_dialog_button_cancel": "取消",
|
|
||||||
"account_upgrade_dialog_button_pay_now": "立即付款並訂閱",
|
|
||||||
"account_upgrade_dialog_button_redirect_signup": "立即註冊",
|
|
||||||
"account_upgrade_dialog_button_update_subscription": "更新訂閱",
|
|
||||||
"account_upgrade_dialog_cancel_warning": "這將<strong>取消你的訂閱</strong>,並在 {{date}} 降級你的帳戶。在那一天,主題保留以及緩存在伺服器上的訊息<strong>將被刪除</strong>。",
|
|
||||||
"account_upgrade_dialog_interval_monthly": "每月",
|
|
||||||
"account_upgrade_dialog_interval_yearly_discount_save_up_to": "節省高達 {{discount}}%",
|
|
||||||
"account_upgrade_dialog_interval_yearly_discount_save": "節省 {{discount}}%",
|
|
||||||
"account_upgrade_dialog_interval_yearly": "每年",
|
|
||||||
"account_upgrade_dialog_proration_info": "<strong>按比例分配</strong>:在付費計劃之間升級時,差價將被<strong>立刻收取</strong>。在降級到較低級別時,餘額將被用於支付未來的賬單周期。",
|
|
||||||
"account_upgrade_dialog_reservations_warning_one": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,<strong>請至少刪除 1 項保留</strong>。你可以在<Link>設置</Link>中刪除保留。",
|
|
||||||
"account_upgrade_dialog_reservations_warning_other": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,<strong>請至少刪除 {{count}} 項保留</strong>。你可以在<Link>設置</Link>中刪除保留。",
|
|
||||||
"account_upgrade_dialog_tier_current_label": "當前",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_file_size": "每個文件 {{filesize}} ",
|
|
||||||
"account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} 總存儲空間",
|
|
||||||
"account_upgrade_dialog_tier_features_calls_one": "每日一通電話",
|
|
||||||
"account_upgrade_dialog_tier_features_calls_other": "每日{{calls}} 通電話",
|
|
||||||
"account_upgrade_dialog_tier_features_emails_one": "每日一封郵件",
|
|
||||||
"account_upgrade_dialog_tier_features_emails_other": "每日 {{emails}} 條郵件",
|
|
||||||
"account_upgrade_dialog_tier_features_messages_one": "每日一條訊息",
|
|
||||||
"account_upgrade_dialog_tier_features_messages_other": "每日 {{messages}} 條訊息",
|
|
||||||
"account_upgrade_dialog_tier_features_no_calls": "沒有電話",
|
|
||||||
"account_upgrade_dialog_tier_features_no_reservations": "無保留主題",
|
|
||||||
"account_upgrade_dialog_tier_features_reservations_one": "保留一條主題",
|
|
||||||
"account_upgrade_dialog_tier_features_reservations_other": "保留 {{reservations}} 條主題",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_monthly": "{{price}} 每年。按月計費。",
|
|
||||||
"account_upgrade_dialog_tier_price_billed_yearly": "{{價格}} 按年計費。節省 {{save}}。",
|
|
||||||
"account_upgrade_dialog_tier_price_per_month": "月",
|
|
||||||
"account_upgrade_dialog_tier_selected_label": "已選",
|
|
||||||
"account_upgrade_dialog_title": "更改帳戶等級",
|
|
||||||
"account_usage_attachment_storage_description": "每個文件 {{filesize}},在 {{expiry}} 後刪除",
|
|
||||||
"account_usage_attachment_storage_title": "附件存儲",
|
|
||||||
"account_usage_basis_ip_description": "此帳戶的使用統計資訊和限制基於你的 IP 地址,因此可能會與其他用戶共享。上面顯示的限制是基於現有速率限制的近似值。",
|
|
||||||
"account_usage_calls_none": "此帳號無法撥打電話",
|
|
||||||
"account_usage_calls_title": "已撥打電話",
|
|
||||||
"account_usage_cannot_create_portal_session": "無法打開計費門戶",
|
|
||||||
"account_usage_emails_title": "已發送電子郵件",
|
|
||||||
"account_usage_limits_reset_daily": "使用限制每天午夜 (UTC) 重置",
|
|
||||||
"account_usage_messages_title": "已發布訊息",
|
|
||||||
"account_usage_of_limit": "{{limit}} 的",
|
|
||||||
"account_usage_reservations_none": "此帳戶沒有保留主題",
|
|
||||||
"account_usage_reservations_title": "保留主題",
|
|
||||||
"account_usage_title": "使用量",
|
|
||||||
"account_usage_unlimited": "無限",
|
|
||||||
"action_bar_account": "帳戶",
|
|
||||||
"action_bar_change_display_name": "更改顯示名稱",
|
|
||||||
"action_bar_clear_notifications": "清除所有通知",
|
|
||||||
"action_bar_logo_alt": "ntfy 標識",
|
"action_bar_logo_alt": "ntfy 標識",
|
||||||
"action_bar_mute_notifications": "靜音",
|
"action_bar_mute_notifications": "靜音",
|
||||||
"action_bar_profile_logout": "登出",
|
|
||||||
"action_bar_profile_settings": "設定",
|
|
||||||
"action_bar_profile_title": "個人資料",
|
|
||||||
"action_bar_reservation_add": "保留主題",
|
|
||||||
"action_bar_reservation_delete": "移除保留",
|
|
||||||
"action_bar_reservation_edit": "更改保留",
|
|
||||||
"action_bar_reservation_limit_reached": "達到限制",
|
|
||||||
"action_bar_send_test_notification": "發送測試通知",
|
|
||||||
"action_bar_settings": "設定",
|
"action_bar_settings": "設定",
|
||||||
"action_bar_show_menu": "顯示選單",
|
"action_bar_send_test_notification": "發送測試通知",
|
||||||
"action_bar_sign_in": "登錄",
|
"action_bar_clear_notifications": "清除所有通知",
|
||||||
"action_bar_sign_up": "註冊",
|
|
||||||
"action_bar_toggle_action_menu": "開啟或關閉操作選單",
|
|
||||||
"action_bar_toggle_mute": "通知靜音/解除通知靜音",
|
|
||||||
"action_bar_unmute_notifications": "取消靜音",
|
|
||||||
"action_bar_unsubscribe": "取消訂閱",
|
"action_bar_unsubscribe": "取消訂閱",
|
||||||
|
"action_bar_toggle_action_menu": "開啟或關閉操作選單",
|
||||||
|
"action_bar_unmute_notifications": "取消靜音",
|
||||||
|
"message_bar_type_message": "在此處輸入訊息",
|
||||||
|
"message_bar_show_dialog": "顯示發布對話框",
|
||||||
|
"message_bar_publish": "發布訊息",
|
||||||
|
"nav_topics_title": "訂閱主題",
|
||||||
|
"nav_button_all_notifications": "全部通知",
|
||||||
|
"nav_button_documentation": "文檔",
|
||||||
|
"nav_button_publish_message": "發布通知",
|
||||||
|
"nav_button_subscribe": "訂閱主題",
|
||||||
|
"nav_button_connecting": "正在連接",
|
||||||
|
"alert_notification_permission_required_title": "已禁用通知",
|
||||||
|
"alert_notification_permission_required_description": "授予瀏覽器顯示桌面通知的權限。",
|
||||||
|
"alert_notification_permission_required_button": "現在授予",
|
||||||
|
"alert_not_supported_title": "不支援通知",
|
||||||
|
"alert_not_supported_description": "你的瀏覽器不支援通知。",
|
||||||
"alert_notification_ios_install_required_description": "要接收通知,請在 iOS 上點擊共享,然後添加到主屏幕",
|
"alert_notification_ios_install_required_description": "要接收通知,請在 iOS 上點擊共享,然後添加到主屏幕",
|
||||||
"alert_notification_ios_install_required_title": "需要安裝 iOS 應用程式",
|
"alert_notification_ios_install_required_title": "需要安裝 iOS 應用程式",
|
||||||
"alert_notification_permission_denied_description": "你已禁用通知。要重新啟用通知,請在瀏覽器設置中啟用通知。",
|
"alert_notification_permission_denied_description": "你已禁用通知。要重新啟用通知,請在瀏覽器設置中啟用通知。",
|
||||||
"alert_notification_permission_denied_title": "已禁用通知",
|
"alert_notification_permission_denied_title": "已禁用通知",
|
||||||
"alert_notification_permission_required_button": "現在授予",
|
|
||||||
"alert_notification_permission_required_description": "授予瀏覽器顯示桌面通知的權限。",
|
|
||||||
"alert_notification_permission_required_title": "已禁用通知",
|
|
||||||
"alert_not_supported_context_description": "通知僅支援 HTTPS。這是 <mdnLink>Notifications API</mdnLink> 的限制。",
|
|
||||||
"alert_not_supported_description": "你的瀏覽器不支援通知。",
|
|
||||||
"alert_not_supported_title": "不支援通知",
|
|
||||||
"common_add": "新增",
|
|
||||||
"common_back": "返回",
|
|
||||||
"common_cancel": "取消",
|
|
||||||
"common_copy_to_clipboard": "複製到剪貼板",
|
|
||||||
"common_save": "保存",
|
|
||||||
"display_name_dialog_description": "為訂閱列表中顯示的主題設置一個替代名稱。這有助於更輕鬆地識別名稱複雜的主題。",
|
|
||||||
"display_name_dialog_placeholder": "顯示名稱",
|
|
||||||
"display_name_dialog_title": "更改顯示名稱",
|
|
||||||
"emoji_picker_search_clear": "清除搜索",
|
|
||||||
"emoji_picker_search_placeholder": "查找表情符號",
|
|
||||||
"error_boundary_button_copy_stack_trace": "複製堆疊追踪",
|
|
||||||
"error_boundary_button_reload_ntfy": "重新加載 ntfy",
|
|
||||||
"error_boundary_description": "這顯然不應該發生。對此非常抱歉。<br/>如果你有時間,請<githubLink>在GitHub</githubLink>上報告,或通過<discordLink>Discord</discordLink>或<matrixLink>Matrix</matrixLink>告訴我們。",
|
|
||||||
"error_boundary_gathering_info": "收集更多資訊……",
|
|
||||||
"error_boundary_stack_trace": "堆疊追踪",
|
|
||||||
"error_boundary_title": "天啊,ntfy 崩潰了",
|
|
||||||
"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_title": "不支援隱私瀏覽",
|
|
||||||
"login_disabled": "登錄已禁用",
|
|
||||||
"login_form_button_submit": "登錄",
|
|
||||||
"login_link_signup": "註冊",
|
|
||||||
"login_title": "請登錄你的 ntfy 帳戶",
|
|
||||||
"message_bar_error_publishing": "發佈通知時出錯",
|
|
||||||
"message_bar_publish": "發布訊息",
|
|
||||||
"message_bar_show_dialog": "顯示發布對話框",
|
|
||||||
"message_bar_type_message": "在此處輸入訊息",
|
|
||||||
"nav_button_account": "帳戶",
|
|
||||||
"nav_button_all_notifications": "全部通知",
|
|
||||||
"nav_button_connecting": "正在連接",
|
|
||||||
"nav_button_documentation": "文檔",
|
|
||||||
"nav_button_muted": "已暫停通知",
|
|
||||||
"nav_button_publish_message": "發布通知",
|
|
||||||
"nav_button_settings": "設定",
|
|
||||||
"nav_button_subscribe": "訂閱主題",
|
|
||||||
"nav_topics_title": "訂閱主題",
|
|
||||||
"nav_upgrade_banner_description": "保留主題,更多訊息和郵件,以及更大的附件",
|
|
||||||
"nav_upgrade_banner_label": "升級到 ntfy Pro",
|
|
||||||
"notifications_actions_failed_notification": "通知失敗",
|
|
||||||
"notifications_actions_http_request_title": "發送 HTTP {{method}} 到 {{url}}",
|
|
||||||
"notifications_actions_not_supported": "網頁應用程序不支援此操作",
|
|
||||||
"notifications_actions_open_url_title": "轉到 {{url}}",
|
|
||||||
"notifications_attachment_copy_url_button": "複製連結地址",
|
|
||||||
"notifications_attachment_copy_url_title": "將附件中連結地址複製到剪貼板",
|
|
||||||
"notifications_attachment_file_app": "安卓應用程式",
|
|
||||||
"notifications_attachment_file_audio": "聲音文件",
|
|
||||||
"notifications_attachment_file_document": "其他文件",
|
|
||||||
"notifications_attachment_file_image": "圖片文件",
|
|
||||||
"notifications_attachment_file_video": "影片文件",
|
|
||||||
"notifications_attachment_image": "附件圖片",
|
|
||||||
"notifications_attachment_link_expired": "下載連結已過期",
|
|
||||||
"notifications_attachment_link_expires": "連結在 {{date}} 過期",
|
|
||||||
"notifications_attachment_open_button": "打開附件",
|
|
||||||
"notifications_attachment_open_title": "轉到 {{url}}",
|
|
||||||
"notifications_click_copy_url_button": "複製鏈結",
|
|
||||||
"notifications_click_copy_url_title": "複製鏈結地址到剪貼板",
|
|
||||||
"notifications_click_open_button": "打開鏈結",
|
|
||||||
"notifications_copied_to_clipboard": "複製到剪貼板",
|
|
||||||
"notifications_delete": "刪除",
|
|
||||||
"notifications_example": "示例",
|
|
||||||
"notifications_list_item": "通知",
|
|
||||||
"notifications_list": "通知列表",
|
"notifications_list": "通知列表",
|
||||||
"notifications_loading": "正在加載通知……",
|
"notifications_list_item": "通知",
|
||||||
"notifications_mark_read": "標記為已讀",
|
"notifications_mark_read": "標記為已讀",
|
||||||
"notifications_more_details": "有關更多資訊,請查看<websiteLink>網站</websiteLink>或<docsLink>文檔</docsLink>。",
|
"notifications_copied_to_clipboard": "複製到剪貼板",
|
||||||
"notifications_new_indicator": "新通知",
|
|
||||||
"notifications_none_for_any_description": "要向此主題發送通知,只需使用 PUT 或 POST 到主題鏈結即可。以下是使用你的主題的示例。",
|
|
||||||
"notifications_none_for_any_title": "你尚未收到任何通知。",
|
|
||||||
"notifications_none_for_topic_description": "要向此主題發送通知,只需使用 PUT 或 POST 到主題連結即可。",
|
|
||||||
"notifications_none_for_topic_title": "你尚未收到有關此主題的任何通知。",
|
|
||||||
"notifications_no_subscriptions_description": "點擊 \"{{linktext}}\" 連結以建立或訂閱主題。之後,你可以使用 PUT 或 POST 發送訊息,你將在這裡收到通知。",
|
|
||||||
"notifications_no_subscriptions_title": "看起來你還未有任何訂閱",
|
|
||||||
"notifications_priority_x": "優先級 {{priority}}",
|
|
||||||
"notifications_tags": "標記",
|
"notifications_tags": "標記",
|
||||||
"prefs_appearance_language_title": "語言",
|
"notifications_priority_x": "優先級 {{priority}}",
|
||||||
"prefs_appearance_theme_dark": "黑暗模式",
|
"notifications_new_indicator": "新通知",
|
||||||
"prefs_appearance_theme_light": "光亮模式",
|
"notifications_attachment_open_button": "打開附件",
|
||||||
"prefs_appearance_theme_system": "系統 (預設)",
|
"notifications_attachment_link_expires": "連結在 {{date}} 過期",
|
||||||
"prefs_appearance_theme_title": "主題",
|
"notifications_attachment_link_expired": "下載連結已過期",
|
||||||
"prefs_appearance_title": "外觀",
|
"notifications_attachment_file_image": "圖片文件",
|
||||||
"prefs_notifications_delete_after_never_description": "永不自動刪除通知",
|
"notifications_attachment_image": "附件圖片",
|
||||||
"prefs_notifications_delete_after_never": "從不",
|
"notifications_attachment_file_video": "影片文件",
|
||||||
"prefs_notifications_delete_after_one_day_description": "一天後自動刪除通知",
|
"notifications_attachment_file_audio": "聲音文件",
|
||||||
"prefs_notifications_delete_after_one_day": "一天後",
|
"notifications_attachment_file_app": "安卓應用程式",
|
||||||
"prefs_notifications_delete_after_one_month_description": "一個月後自動刪除通知",
|
"notifications_attachment_file_document": "其他文件",
|
||||||
"prefs_notifications_delete_after_one_month": "一個月後",
|
"notifications_click_copy_url_title": "複製鏈結地址到剪貼板",
|
||||||
"prefs_notifications_delete_after_one_week_description": "一周後自動刪除通知",
|
"notifications_click_copy_url_button": "複製鏈結",
|
||||||
"prefs_notifications_delete_after_one_week": "一周後",
|
"notifications_click_open_button": "打開鏈結",
|
||||||
"prefs_notifications_delete_after_three_hours_description": "三小時後自動刪除通知",
|
"action_bar_toggle_mute": "通知靜音/解除通知靜音",
|
||||||
"prefs_notifications_delete_after_three_hours": "三小時後",
|
"nav_button_muted": "已暫停通知",
|
||||||
"prefs_notifications_delete_after_title": "刪除通知",
|
"notifications_actions_not_supported": "網頁應用程序不支援此操作",
|
||||||
"prefs_notifications_min_priority_any": "任意優先級",
|
"notifications_none_for_topic_title": "你尚未收到有關此主題的任何通知。",
|
||||||
"prefs_notifications_min_priority_default_and_higher": "默認優先級或更高",
|
"notifications_none_for_any_title": "你尚未收到任何通知。",
|
||||||
"prefs_notifications_min_priority_description_any": "顯示所有通知,無論優先級如何",
|
"notifications_none_for_any_description": "要向此主題發送通知,只需使用 PUT 或 POST 到主題鏈結即可。以下是使用你的主題的示例。",
|
||||||
"prefs_notifications_min_priority_description_max": "僅顯示最高優先級的通知",
|
"notifications_no_subscriptions_title": "看起來你還未有任何訂閱",
|
||||||
"prefs_notifications_min_priority_description_x_or_higher": "僅顯示優先級為{{number}}({{name}})或以上的通知",
|
"notifications_example": "示例",
|
||||||
"prefs_notifications_min_priority_high_and_higher": "高優先級或更高",
|
"notifications_more_details": "有關更多資訊,請查看<websiteLink>網站</websiteLink>或<docsLink>文檔</docsLink>。",
|
||||||
"prefs_notifications_min_priority_low_and_higher": "低優先級或更高",
|
"notifications_loading": "正在加載通知……",
|
||||||
"prefs_notifications_min_priority_max_only": "僅最高優先級",
|
"publish_dialog_title_topic": "發布到 {{topic}}",
|
||||||
"prefs_notifications_min_priority_title": "最低優先級",
|
"publish_dialog_title_no_topic": "發布通知",
|
||||||
|
"publish_dialog_progress_uploading": "正在上傳……",
|
||||||
|
"publish_dialog_progress_uploading_detail": "正在上傳 {{loaded}}/{{total}} ({{percent}}%) ……",
|
||||||
|
"publish_dialog_message_published": "已發布通知",
|
||||||
|
"publish_dialog_attachment_limits_file_and_quota_reached": "超過 {{fileSizeLimit}} 文件限制和配額,剩餘 {{remainingBytes}}",
|
||||||
|
"publish_dialog_emoji_picker_show": "選擇表情符號",
|
||||||
|
"publish_dialog_priority_min": "最低優先級",
|
||||||
|
"publish_dialog_priority_low": "低優先級",
|
||||||
|
"publish_dialog_priority_default": "默認優先級",
|
||||||
|
"publish_dialog_priority_high": "高優先級",
|
||||||
|
"publish_dialog_priority_max": "最高優先級",
|
||||||
|
"publish_dialog_topic_label": "主題名稱",
|
||||||
|
"publish_dialog_topic_placeholder": "主題名稱,例如 phil_alerts",
|
||||||
|
"publish_dialog_topic_reset": "重置主題",
|
||||||
|
"publish_dialog_title_label": "主題",
|
||||||
|
"publish_dialog_message_label": "訊息",
|
||||||
|
"publish_dialog_message_placeholder": "在此輸入訊息",
|
||||||
|
"publish_dialog_tags_label": "標記",
|
||||||
|
"publish_dialog_priority_label": "優先級",
|
||||||
|
"publish_dialog_base_url_label": "服務鏈結地址",
|
||||||
|
"publish_dialog_base_url_placeholder": "服務鏈結地址,例如 https://example.com",
|
||||||
|
"publish_dialog_click_label": "點擊鏈結地址",
|
||||||
|
"publish_dialog_click_placeholder": "點擊通知時打開鏈結地址",
|
||||||
|
"publish_dialog_email_placeholder": "將通知轉發到的地址,例如 phil@example.com",
|
||||||
|
"publish_dialog_email_reset": "移除電子郵件轉發",
|
||||||
|
"publish_dialog_filename_label": "文件名",
|
||||||
|
"publish_dialog_filename_placeholder": "附件文件名",
|
||||||
|
"publish_dialog_delay_label": "延期",
|
||||||
|
"publish_dialog_other_features": "其它功能:",
|
||||||
|
"publish_dialog_attach_placeholder": "使用鏈結地址附加文件,例如 https://f-droid.org/F-Droid.apk",
|
||||||
|
"publish_dialog_delay_reset": "刪除延期投遞",
|
||||||
|
"publish_dialog_attach_reset": "移除附件鏈結地址",
|
||||||
|
"publish_dialog_chip_click_label": "點擊鏈結地址",
|
||||||
|
"publish_dialog_chip_email_label": "轉發郵件",
|
||||||
|
"publish_dialog_chip_attach_file_label": "本地文件附件",
|
||||||
|
"publish_dialog_chip_topic_label": "變更主題",
|
||||||
|
"publish_dialog_button_cancel_sending": "取消發送",
|
||||||
|
"publish_dialog_checkbox_publish_another": "發布另一個",
|
||||||
|
"publish_dialog_attached_file_title": "附件文件:",
|
||||||
|
"publish_dialog_attached_file_filename_placeholder": "附件文件名",
|
||||||
|
"publish_dialog_attached_file_remove": "刪除附件文件",
|
||||||
|
"publish_dialog_drop_file_here": "將文件拖拽至此",
|
||||||
|
"emoji_picker_search_placeholder": "查找表情符號",
|
||||||
|
"emoji_picker_search_clear": "清除搜索",
|
||||||
|
"subscribe_dialog_subscribe_title": "訂閱主題",
|
||||||
|
"publish_dialog_chip_delay_label": "延期投遞",
|
||||||
|
"publish_dialog_chip_attach_url_label": "鏈結附件地址",
|
||||||
|
"subscribe_dialog_subscribe_use_another_label": "使用其他伺服器",
|
||||||
|
"subscribe_dialog_subscribe_button_subscribe": "訂閱",
|
||||||
|
"subscribe_dialog_login_title": "請登錄",
|
||||||
|
"subscribe_dialog_login_description": "本主題受密碼保護,請輸入用戶名和密碼以訂閱。",
|
||||||
|
"subscribe_dialog_login_username_label": "用戶名,例如 phil",
|
||||||
|
"subscribe_dialog_login_password_label": "密碼",
|
||||||
|
"common_back": "返回",
|
||||||
|
"subscribe_dialog_login_button_login": "登入",
|
||||||
|
"subscribe_dialog_error_user_not_authorized": "未授權 {{username}} 使用者",
|
||||||
|
"subscribe_dialog_error_user_anonymous": "匿名",
|
||||||
|
"prefs_notifications_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_sound_title": "通知提示音",
|
"prefs_notifications_min_priority_title": "最低優先級",
|
||||||
"prefs_notifications_title": "通知",
|
"prefs_notifications_min_priority_description_x_or_higher": "僅顯示優先級為{{number}}({{name}})或以上的通知",
|
||||||
"prefs_notifications_web_push_disabled_description": "當網頁程式在運行時將會收到通知 (透過 WebSocket)",
|
"prefs_notifications_min_priority_description_max": "僅顯示最高優先級的通知",
|
||||||
"prefs_notifications_web_push_disabled": "己暫用",
|
"prefs_notifications_min_priority_any": "任意優先級",
|
||||||
|
"prefs_notifications_min_priority_low_and_higher": "低優先級或更高",
|
||||||
|
"prefs_notifications_min_priority_default_and_higher": "默認優先級或更高",
|
||||||
|
"prefs_notifications_min_priority_high_and_higher": "高優先級或更高",
|
||||||
|
"prefs_notifications_min_priority_max_only": "僅最高優先級",
|
||||||
|
"prefs_notifications_delete_after_never": "從不",
|
||||||
|
"prefs_notifications_delete_after_one_month": "一個月後",
|
||||||
|
"prefs_notifications_delete_after_one_week": "一周後",
|
||||||
|
"prefs_notifications_delete_after_never_description": "永不自動刪除通知",
|
||||||
|
"prefs_notifications_delete_after_three_hours_description": "三小時後自動刪除通知",
|
||||||
|
"prefs_notifications_delete_after_one_day_description": "一天後自動刪除通知",
|
||||||
|
"prefs_notifications_delete_after_one_week_description": "一周後自動刪除通知",
|
||||||
|
"prefs_notifications_delete_after_one_month_description": "一個月後自動刪除通知",
|
||||||
"prefs_notifications_web_push_enabled_description": "即使網頁程式未有運街亦會收到通知 (via Web Push)",
|
"prefs_notifications_web_push_enabled_description": "即使網頁程式未有運街亦會收到通知 (via Web Push)",
|
||||||
|
"prefs_notifications_web_push_disabled_description": "當網頁程式在運行時將會收到通知 (透過 WebSocket)",
|
||||||
"prefs_notifications_web_push_enabled": "己為 {{server}} 啟用",
|
"prefs_notifications_web_push_enabled": "己為 {{server}} 啟用",
|
||||||
|
"prefs_notifications_web_push_disabled": "己暫用",
|
||||||
"prefs_notifications_web_push_title": "背景通知",
|
"prefs_notifications_web_push_title": "背景通知",
|
||||||
"prefs_reservations_add_button": "新增保留主題",
|
"prefs_users_title": "管理使用者",
|
||||||
"prefs_reservations_delete_button": "重置主題訪問",
|
|
||||||
"prefs_reservations_description": "你可以在此處保留主題名稱供個人使用。保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。",
|
|
||||||
"prefs_reservations_dialog_access_label": "訪問",
|
|
||||||
"prefs_reservations_dialog_description": "保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。",
|
|
||||||
"prefs_reservations_dialog_title_add": "保留主題",
|
|
||||||
"prefs_reservations_dialog_title_delete": "刪除主題保留",
|
|
||||||
"prefs_reservations_dialog_title_edit": "編輯保留主題",
|
|
||||||
"prefs_reservations_dialog_topic_label": "主題",
|
|
||||||
"prefs_reservations_edit_button": "編輯主題訪問",
|
|
||||||
"prefs_reservations_limit_reached": "你已達到保留主題限制。",
|
|
||||||
"prefs_reservations_table_access_header": "訪問",
|
|
||||||
"prefs_reservations_table_click_to_subscribe": "點擊以訂閱",
|
|
||||||
"prefs_reservations_table_everyone_deny_all": "只有我可以發佈和訂閱",
|
|
||||||
"prefs_reservations_table_everyone_read_only": "我可以發佈和訂閱,每個人都可以訂閱",
|
|
||||||
"prefs_reservations_table_everyone_read_write": "每個人都可以發佈和訂閱",
|
|
||||||
"prefs_reservations_table_everyone_write_only": "我可以發佈和訂閱,每個人都可以發佈",
|
|
||||||
"prefs_reservations_table_not_subscribed": "未訂閱",
|
|
||||||
"prefs_reservations_table_topic_header": "主題",
|
|
||||||
"prefs_reservations_table": "保留主題表格",
|
|
||||||
"prefs_reservations_title": "保留主題",
|
|
||||||
"prefs_users_add_button": "新增使用者",
|
|
||||||
"prefs_users_delete_button": "刪除用戶",
|
|
||||||
"prefs_users_description_no_sync": "用戶和密碼不會同步到你的賬戶。",
|
|
||||||
"prefs_users_description": "在此處新增/刪除受保護主題的使用者。請注意,使用者名和密碼將存儲在瀏覽器的本地存儲中。",
|
"prefs_users_description": "在此處新增/刪除受保護主題的使用者。請注意,使用者名和密碼將存儲在瀏覽器的本地存儲中。",
|
||||||
"prefs_users_dialog_base_url_label": "服務連結地址,例如 https://ntfy.sh",
|
"prefs_users_add_button": "新增使用者",
|
||||||
"prefs_users_dialog_password_label": "密碼",
|
|
||||||
"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_edit_button": "編輯用戶",
|
"prefs_users_dialog_password_label": "密碼",
|
||||||
"prefs_users_table_base_url_header": "服務連結地址",
|
"common_cancel": "取消",
|
||||||
"prefs_users_table_cannot_delete_or_edit": "無法刪除或編輯已登錄用戶",
|
"common_save": "保存",
|
||||||
"prefs_users_table_user_header": "用戶",
|
"prefs_appearance_title": "外觀",
|
||||||
"prefs_users_table": "用戶表",
|
"prefs_appearance_language_title": "語言",
|
||||||
"prefs_users_title": "管理使用者",
|
"prefs_appearance_theme_title": "主題",
|
||||||
|
"prefs_appearance_theme_system": "系統 (預設)",
|
||||||
|
"prefs_appearance_theme_dark": "黑暗模式",
|
||||||
|
"prefs_appearance_theme_light": "光亮模式",
|
||||||
|
"priority_min": "最低",
|
||||||
|
"priority_low": "低",
|
||||||
"priority_default": "預設",
|
"priority_default": "預設",
|
||||||
"priority_high": "高",
|
"priority_high": "高",
|
||||||
"priority_low": "低",
|
|
||||||
"priority_max": "最高",
|
"priority_max": "最高",
|
||||||
"priority_min": "最低",
|
"error_boundary_title": "天啊,ntfy 崩潰了",
|
||||||
"publish_dialog_attached_file_filename_placeholder": "附件文件名",
|
"prefs_users_table_base_url_header": "服務連結地址",
|
||||||
"publish_dialog_attached_file_remove": "刪除附件文件",
|
"prefs_users_dialog_base_url_label": "服務連結地址,例如 https://ntfy.sh",
|
||||||
"publish_dialog_attached_file_title": "附件文件:",
|
"error_boundary_button_copy_stack_trace": "複製堆疊追踪",
|
||||||
"publish_dialog_attach_label": "附件連結地址",
|
"error_boundary_button_reload_ntfy": "重新加載 ntfy",
|
||||||
"publish_dialog_attachment_limits_file_and_quota_reached": "超過 {{fileSizeLimit}} 文件限制和配額,剩餘 {{remainingBytes}}",
|
"error_boundary_stack_trace": "堆疊追踪",
|
||||||
|
"error_boundary_gathering_info": "收集更多資訊……",
|
||||||
|
"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>上與我們交談。",
|
||||||
|
"message_bar_error_publishing": "發佈通知時出錯",
|
||||||
|
"nav_button_settings": "設定",
|
||||||
|
"notifications_delete": "刪除",
|
||||||
|
"notifications_attachment_copy_url_title": "將附件中連結地址複製到剪貼板",
|
||||||
|
"notifications_attachment_copy_url_button": "複製連結地址",
|
||||||
|
"notifications_attachment_open_title": "轉到 {{url}}",
|
||||||
|
"notifications_actions_http_request_title": "發送 HTTP {{method}} 到 {{url}}",
|
||||||
|
"notifications_actions_failed_notification": "通知失敗",
|
||||||
|
"notifications_actions_open_url_title": "轉到 {{url}}",
|
||||||
|
"notifications_none_for_topic_description": "要向此主題發送通知,只需使用 PUT 或 POST 到主題連結即可。",
|
||||||
|
"subscribe_dialog_subscribe_topic_placeholder": "主題名,例如 phil_alerts",
|
||||||
|
"notifications_no_subscriptions_description": "點擊 \"{{linktext}}\" 連結以建立或訂閱主題。之後,你可以使用 PUT 或 POST 發送訊息,你將在這裡收到通知。",
|
||||||
"publish_dialog_attachment_limits_file_reached": "超過 {{fileSizeLimit}} 文件限制",
|
"publish_dialog_attachment_limits_file_reached": "超過 {{fileSizeLimit}} 文件限制",
|
||||||
"publish_dialog_attachment_limits_quota_reached": "超過配額,剩餘 {{remainingBytes}}",
|
|
||||||
"publish_dialog_attach_placeholder": "使用鏈結地址附加文件,例如 https://f-droid.org/F-Droid.apk",
|
|
||||||
"publish_dialog_attach_reset": "移除附件鏈結地址",
|
|
||||||
"publish_dialog_base_url_label": "服務鏈結地址",
|
|
||||||
"publish_dialog_base_url_placeholder": "服務鏈結地址,例如 https://example.com",
|
|
||||||
"publish_dialog_button_cancel_sending": "取消發送",
|
|
||||||
"publish_dialog_button_cancel": "取消",
|
|
||||||
"publish_dialog_button_send": "發送",
|
|
||||||
"publish_dialog_call_item": "撥打電話 {{number}}",
|
|
||||||
"publish_dialog_call_label": "撥號",
|
|
||||||
"publish_dialog_call_reset": "清空撥號",
|
|
||||||
"publish_dialog_checkbox_markdown": "格式化為 Markdown",
|
|
||||||
"publish_dialog_checkbox_publish_another": "發布另一個",
|
|
||||||
"publish_dialog_chip_attach_file_label": "本地文件附件",
|
|
||||||
"publish_dialog_chip_attach_url_label": "鏈結附件地址",
|
|
||||||
"publish_dialog_chip_call_label": "撥號",
|
|
||||||
"publish_dialog_chip_call_no_verified_numbers_tooltip": "未驗證的電話號碼",
|
|
||||||
"publish_dialog_chip_click_label": "點擊鏈結地址",
|
|
||||||
"publish_dialog_chip_delay_label": "延期投遞",
|
|
||||||
"publish_dialog_chip_email_label": "轉發郵件",
|
|
||||||
"publish_dialog_chip_topic_label": "變更主題",
|
|
||||||
"publish_dialog_click_label": "點擊鏈結地址",
|
|
||||||
"publish_dialog_click_placeholder": "點擊通知時打開鏈結地址",
|
|
||||||
"publish_dialog_click_reset": "移除點擊連結地址",
|
|
||||||
"publish_dialog_delay_label": "延期",
|
|
||||||
"publish_dialog_delay_placeholder": "延期投遞,例如 {{unixTimestamp}}、{{relativeTime}}或「{{naturalLanguage}}」(僅限英語)",
|
|
||||||
"publish_dialog_delay_reset": "刪除延期投遞",
|
|
||||||
"publish_dialog_details_examples_description": "有關所有發送功能的範例和詳細說明,請參閱<docsLink>文檔</docsLink>。",
|
|
||||||
"publish_dialog_drop_file_here": "將文件拖拽至此",
|
|
||||||
"publish_dialog_email_label": "電子郵件",
|
|
||||||
"publish_dialog_email_placeholder": "將通知轉發到的地址,例如 phil@example.com",
|
|
||||||
"publish_dialog_email_reset": "移除電子郵件轉發",
|
|
||||||
"publish_dialog_emoji_picker_show": "選擇表情符號",
|
|
||||||
"publish_dialog_filename_label": "文件名",
|
|
||||||
"publish_dialog_filename_placeholder": "附件文件名",
|
|
||||||
"publish_dialog_message_label": "訊息",
|
|
||||||
"publish_dialog_message_placeholder": "在此輸入訊息",
|
|
||||||
"publish_dialog_message_published": "已發布通知",
|
|
||||||
"publish_dialog_other_features": "其它功能:",
|
|
||||||
"publish_dialog_priority_default": "默認優先級",
|
|
||||||
"publish_dialog_priority_high": "高優先級",
|
|
||||||
"publish_dialog_priority_label": "優先級",
|
|
||||||
"publish_dialog_priority_low": "低優先級",
|
|
||||||
"publish_dialog_priority_max": "最高優先級",
|
|
||||||
"publish_dialog_priority_min": "最低優先級",
|
|
||||||
"publish_dialog_progress_uploading_detail": "正在上傳 {{loaded}}/{{total}} ({{percent}}%) ……",
|
|
||||||
"publish_dialog_progress_uploading": "正在上傳……",
|
|
||||||
"publish_dialog_tags_label": "標記",
|
|
||||||
"publish_dialog_tags_placeholder": "英文逗號分隔標記列表,例如 warning, srv1-backup",
|
|
||||||
"publish_dialog_title_label": "主題",
|
|
||||||
"publish_dialog_title_no_topic": "發布通知",
|
|
||||||
"publish_dialog_title_placeholder": "主題標題,例如 磁碟空間警告",
|
"publish_dialog_title_placeholder": "主題標題,例如 磁碟空間警告",
|
||||||
"publish_dialog_title_topic": "發布到 {{topic}}",
|
"publish_dialog_email_label": "電子郵件",
|
||||||
"publish_dialog_topic_label": "主題名稱",
|
"publish_dialog_button_send": "發送",
|
||||||
"publish_dialog_topic_placeholder": "主題名稱,例如 phil_alerts",
|
"publish_dialog_checkbox_markdown": "格式化為 Markdown",
|
||||||
"publish_dialog_topic_reset": "重置主題",
|
"publish_dialog_attachment_limits_quota_reached": "超過配額,剩餘 {{remainingBytes}}",
|
||||||
"reservation_delete_dialog_action_delete_description": "緩存的郵件和附件將被永久刪除。此操作無法撤銷。",
|
"publish_dialog_attach_label": "附件連結地址",
|
||||||
"reservation_delete_dialog_action_delete_title": "刪除緩存的郵件和附件",
|
"publish_dialog_click_reset": "移除點擊連結地址",
|
||||||
"reservation_delete_dialog_action_keep_description": "緩存在伺服器上的訊息和附件將對知道主題名稱的人公開可見。",
|
"publish_dialog_button_cancel": "取消",
|
||||||
"reservation_delete_dialog_action_keep_title": "保留緩存的郵件和附件",
|
"subscribe_dialog_subscribe_button_cancel": "取消",
|
||||||
"reservation_delete_dialog_description": "刪除保留會放棄對該主題的所有權,並允許其他人保留它。你可以保留或刪除現有郵件和附件。",
|
"subscribe_dialog_subscribe_base_url_label": "服務地址地址",
|
||||||
"reservation_delete_dialog_submit_button": "刪除保留",
|
"subscribe_dialog_subscribe_use_another_background_info": "當網頁程式未開啟, 將不會收到來自其他伺服器的通知",
|
||||||
|
"prefs_notifications_min_priority_description_any": "顯示所有通知,無論優先級如何",
|
||||||
|
"prefs_notifications_delete_after_title": "刪除通知",
|
||||||
|
"prefs_notifications_delete_after_three_hours": "三小時後",
|
||||||
|
"prefs_users_delete_button": "刪除用戶",
|
||||||
|
"prefs_users_table_user_header": "用戶",
|
||||||
|
"common_add": "新增",
|
||||||
|
"prefs_notifications_delete_after_one_day": "一天後",
|
||||||
|
"error_boundary_description": "這顯然不應該發生。對此非常抱歉。<br/>如果你有時間,請<githubLink>在GitHub</githubLink>上報告,或通過<discordLink>Discord</discordLink>或<matrixLink>Matrix</matrixLink>告訴我們。",
|
||||||
|
"prefs_users_table": "用戶表",
|
||||||
|
"prefs_users_edit_button": "編輯用戶",
|
||||||
|
"publish_dialog_tags_placeholder": "英文逗號分隔標記列表,例如 warning, srv1-backup",
|
||||||
|
"publish_dialog_details_examples_description": "有關所有發送功能的範例和詳細說明,請參閱<docsLink>文檔</docsLink>。",
|
||||||
|
"subscribe_dialog_subscribe_description": "主題可能不受密碼保護,因此請選擇一個不容易被猜中的名字。訂閱後,你可以使用 PUT/POST 通知。",
|
||||||
|
"publish_dialog_delay_placeholder": "延期投遞,例如 {{unixTimestamp}}、{{relativeTime}}或「{{naturalLanguage}}」(僅限英語)",
|
||||||
|
"account_usage_basis_ip_description": "此帳戶的使用統計資訊和限制基於你的 IP 地址,因此可能會與其他用戶共享。上面顯示的限制是基於現有速率限制的近似值。",
|
||||||
|
"account_usage_cannot_create_portal_session": "無法打開計費門戶",
|
||||||
|
"account_delete_title": "刪除帳戶",
|
||||||
|
"account_delete_description": "永久刪除你的帳戶",
|
||||||
|
"signup_error_username_taken": "用戶名 {{username}} 已被取用",
|
||||||
|
"signup_error_creation_limit_reached": "已達到帳戶創建限制",
|
||||||
|
"login_title": "請登錄你的 ntfy 帳戶",
|
||||||
|
"action_bar_change_display_name": "更改顯示名稱",
|
||||||
|
"action_bar_reservation_add": "保留主題",
|
||||||
|
"action_bar_reservation_delete": "移除保留",
|
||||||
|
"action_bar_reservation_limit_reached": "達到限制",
|
||||||
|
"action_bar_profile_title": "個人資料",
|
||||||
|
"action_bar_profile_settings": "設定",
|
||||||
|
"action_bar_profile_logout": "登出",
|
||||||
|
"action_bar_mute_notifications": "靜音",
|
||||||
|
"action_bar_sign_in": "登錄",
|
||||||
|
"action_bar_sign_up": "註冊",
|
||||||
|
"nav_button_account": "帳戶",
|
||||||
|
"nav_upgrade_banner_label": "升級到 ntfy Pro",
|
||||||
|
"nav_upgrade_banner_description": "保留主題,更多訊息和郵件,以及更大的附件",
|
||||||
|
"alert_not_supported_context_description": "通知僅支援 HTTPS。這是 <mdnLink>Notifications API</mdnLink> 的限制。",
|
||||||
|
"display_name_dialog_title": "更改顯示名稱",
|
||||||
|
"display_name_dialog_description": "為訂閱列表中顯示的主題設置一個替代名稱。這有助於更輕鬆地識別名稱複雜的主題。",
|
||||||
|
"display_name_dialog_placeholder": "顯示名稱",
|
||||||
"reserve_dialog_checkbox_label": "保留主題並配置訪問",
|
"reserve_dialog_checkbox_label": "保留主題並配置訪問",
|
||||||
|
"subscribe_dialog_subscribe_button_generate_topic_name": "生成名稱",
|
||||||
|
"account_basics_username_description": "嘿,那是你 ❤",
|
||||||
|
"account_basics_password_description": "更改你的帳戶密碼",
|
||||||
|
"account_basics_password_dialog_title": "更改密碼",
|
||||||
|
"account_basics_password_dialog_current_password_label": "當前密碼",
|
||||||
|
"account_basics_password_dialog_new_password_label": "新密碼",
|
||||||
|
"account_basics_password_dialog_confirm_password_label": "確認密碼",
|
||||||
|
"account_basics_password_dialog_button_submit": "更改密碼",
|
||||||
|
"account_basics_password_dialog_current_password_incorrect": "密碼錯誤",
|
||||||
|
"account_usage_title": "使用量",
|
||||||
|
"account_usage_of_limit": "{{limit}} 的",
|
||||||
|
"account_usage_unlimited": "無限",
|
||||||
|
"account_usage_limits_reset_daily": "使用限制每天午夜 (UTC) 重置",
|
||||||
|
"account_basics_tier_title": "帳戶類型",
|
||||||
|
"account_basics_tier_description": "你帳戶的權限級別",
|
||||||
|
"account_basics_tier_admin": "管理員",
|
||||||
|
"account_basics_tier_admin_suffix_with_tier": "(有 {{tier}} 等級)",
|
||||||
|
"account_basics_tier_admin_suffix_no_tier": "(無等級)",
|
||||||
|
"account_basics_tier_basic": "基礎版",
|
||||||
|
"account_basics_tier_free": "免費",
|
||||||
|
"account_basics_tier_upgrade_button": "升級到專業版",
|
||||||
|
"account_basics_tier_change_button": "改變",
|
||||||
|
"account_basics_tier_paid_until": "訂閱已支付至 {{date}},並將自動續訂",
|
||||||
|
"account_basics_tier_manage_billing_button": "管理計費",
|
||||||
|
"account_usage_messages_title": "已發布訊息",
|
||||||
|
"account_usage_emails_title": "已發送電子郵件",
|
||||||
|
"account_usage_reservations_title": "保留主題",
|
||||||
|
"account_usage_reservations_none": "此帳戶沒有保留主題",
|
||||||
|
"account_usage_attachment_storage_title": "附件存儲",
|
||||||
|
"account_usage_attachment_storage_description": "每個文件 {{filesize}},在 {{expiry}} 後刪除",
|
||||||
|
"account_upgrade_dialog_button_pay_now": "立即付款並訂閱",
|
||||||
|
"account_upgrade_dialog_button_cancel_subscription": "取消訂閱",
|
||||||
|
"account_upgrade_dialog_button_update_subscription": "更新訂閱",
|
||||||
|
"account_tokens_dialog_title_create": "創建訪問令牌",
|
||||||
|
"account_tokens_dialog_title_edit": "編輯訪問令牌",
|
||||||
|
"account_tokens_dialog_title_delete": "刪除訪問令牌",
|
||||||
|
"account_tokens_dialog_button_cancel": "取消",
|
||||||
|
"account_tokens_dialog_expires_label": "訪問令牌過期於",
|
||||||
|
"account_tokens_dialog_expires_unchanged": "保持過期日期不變",
|
||||||
|
"account_tokens_dialog_expires_x_hours": "令牌在 {{hours}} 小時後過期",
|
||||||
|
"account_tokens_dialog_expires_x_days": "令牌在 {{days}} 天後過期",
|
||||||
|
"account_tokens_dialog_expires_never": "令牌永不過期",
|
||||||
|
"account_tokens_delete_dialog_title": "刪除訪問令牌",
|
||||||
|
"account_tokens_delete_dialog_description": "在刪除訪問令牌之前,請確保沒有應用程序或腳本正在活躍使用它。 <strong>此操作無法撤銷</strong>。",
|
||||||
|
"account_tokens_delete_dialog_submit_button": "永久删除令牌",
|
||||||
|
"prefs_users_description_no_sync": "用戶和密碼不會同步到你的賬戶。",
|
||||||
|
"prefs_users_table_cannot_delete_or_edit": "無法刪除或編輯已登錄用戶",
|
||||||
|
"prefs_reservations_title": "保留主題",
|
||||||
|
"prefs_reservations_description": "你可以在此處保留主題名稱供個人使用。保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。",
|
||||||
|
"prefs_reservations_limit_reached": "你已達到保留主題限制。",
|
||||||
|
"prefs_reservations_add_button": "新增保留主題",
|
||||||
|
"prefs_reservations_edit_button": "編輯主題訪問",
|
||||||
|
"prefs_reservations_delete_button": "重置主題訪問",
|
||||||
|
"prefs_reservations_table": "保留主題表格",
|
||||||
|
"prefs_reservations_table_topic_header": "主題",
|
||||||
|
"prefs_reservations_table_access_header": "訪問",
|
||||||
|
"prefs_reservations_table_everyone_deny_all": "只有我可以發佈和訂閱",
|
||||||
|
"prefs_reservations_table_everyone_read_only": "我可以發佈和訂閱,每個人都可以訂閱",
|
||||||
|
"prefs_reservations_table_everyone_write_only": "我可以發佈和訂閱,每個人都可以發佈",
|
||||||
|
"prefs_reservations_table_everyone_read_write": "每個人都可以發佈和訂閱",
|
||||||
|
"prefs_reservations_table_not_subscribed": "未訂閱",
|
||||||
|
"prefs_reservations_table_click_to_subscribe": "點擊以訂閱",
|
||||||
|
"prefs_reservations_dialog_title_add": "保留主題",
|
||||||
|
"prefs_reservations_dialog_title_edit": "編輯保留主題",
|
||||||
|
"prefs_reservations_dialog_title_delete": "刪除主題保留",
|
||||||
|
"prefs_reservations_dialog_description": "保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。",
|
||||||
|
"prefs_reservations_dialog_topic_label": "主題",
|
||||||
|
"prefs_reservations_dialog_access_label": "訪問",
|
||||||
|
"reservation_delete_dialog_description": "刪除保留會放棄對該主題的所有權,並允許其他人保留它。你可以保留或刪除現有郵件和附件。",
|
||||||
|
"reservation_delete_dialog_action_keep_title": "保留緩存的郵件和附件",
|
||||||
|
"reservation_delete_dialog_action_keep_description": "緩存在伺服器上的訊息和附件將對知道主題名稱的人公開可見。",
|
||||||
|
"reservation_delete_dialog_action_delete_title": "刪除緩存的郵件和附件",
|
||||||
|
"reservation_delete_dialog_action_delete_description": "緩存的郵件和附件將被永久刪除。此操作無法撤銷。",
|
||||||
|
"reservation_delete_dialog_submit_button": "刪除保留",
|
||||||
|
"account_delete_dialog_description": "這將永久刪除你的帳戶,包括存儲在伺服器上的所有數據。刪除後,你的用戶名將在 7 天內不可用。如果你真的想繼續,請在下面的框中使用你的密碼作確認。",
|
||||||
|
"account_delete_dialog_label": "密碼",
|
||||||
|
"account_delete_dialog_button_cancel": "取消",
|
||||||
|
"account_delete_dialog_button_submit": "永久刪除帳戶",
|
||||||
|
"account_delete_dialog_billing_warning": "刪除你的帳戶也會立即取消你的計費訂閱。你將無法再訪問計費儀錶板。",
|
||||||
|
"account_upgrade_dialog_title": "更改帳戶等級",
|
||||||
|
"account_upgrade_dialog_cancel_warning": "這將<strong>取消你的訂閱</strong>,並在 {{date}} 降級你的帳戶。在那一天,主題保留以及緩存在伺服器上的訊息<strong>將被刪除</strong>。",
|
||||||
|
"account_upgrade_dialog_proration_info": "<strong>按比例分配</strong>:在付費計劃之間升級時,差價將被<strong>立刻收取</strong>。在降級到較低級別時,餘額將被用於支付未來的賬單周期。",
|
||||||
|
"account_upgrade_dialog_reservations_warning_one": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,<strong>請至少刪除 1 項保留</strong>。你可以在<Link>設置</Link>中刪除保留。",
|
||||||
|
"account_upgrade_dialog_reservations_warning_other": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,<strong>請至少刪除 {{count}} 項保留</strong>。你可以在<Link>設置</Link>中刪除保留。",
|
||||||
|
"account_upgrade_dialog_tier_features_reservations_other": "保留 {{reservations}} 條主題",
|
||||||
|
"account_upgrade_dialog_tier_features_messages_other": "每日 {{messages}} 條訊息",
|
||||||
|
"account_upgrade_dialog_tier_features_emails_other": "每日 {{emails}} 條郵件",
|
||||||
|
"account_upgrade_dialog_tier_features_attachment_file_size": "每個文件 {{filesize}} ",
|
||||||
|
"signup_form_confirm_password": "確認密碼",
|
||||||
|
"signup_form_button_submit": "註冊",
|
||||||
|
"signup_form_toggle_password_visibility": "切換密碼可見性",
|
||||||
|
"signup_title": "創建一個 ntfy 帳戶",
|
||||||
|
"signup_form_username": "用戶名",
|
||||||
|
"signup_form_password": "密碼",
|
||||||
"signup_already_have_account": "已有帳戶?登錄!",
|
"signup_already_have_account": "已有帳戶?登錄!",
|
||||||
"signup_disabled": "註冊已禁用",
|
"signup_disabled": "註冊已禁用",
|
||||||
"signup_error_creation_limit_reached": "已達到帳戶創建限制",
|
"login_form_button_submit": "登錄",
|
||||||
"signup_error_username_taken": "用戶名 {{username}} 已被取用",
|
"login_link_signup": "註冊",
|
||||||
"signup_form_button_submit": "註冊",
|
"login_disabled": "登錄已禁用",
|
||||||
"signup_form_confirm_password": "確認密碼",
|
"action_bar_account": "帳戶",
|
||||||
"signup_form_password": "密碼",
|
"action_bar_reservation_edit": "更改保留",
|
||||||
"signup_form_toggle_password_visibility": "切換密碼可見性",
|
|
||||||
"signup_form_username": "用戶名",
|
|
||||||
"signup_title": "創建一個 ntfy 帳戶",
|
|
||||||
"subscribe_dialog_error_topic_already_reserved": "主題已保留",
|
"subscribe_dialog_error_topic_already_reserved": "主題已保留",
|
||||||
"subscribe_dialog_error_user_anonymous": "匿名",
|
"account_basics_title": "帳戶",
|
||||||
"subscribe_dialog_error_user_not_authorized": "未授權 {{username}} 使用者",
|
"account_basics_username_title": "用戶名",
|
||||||
"subscribe_dialog_login_button_login": "登入",
|
"account_basics_username_admin_tooltip": "你是管理員",
|
||||||
"subscribe_dialog_login_description": "本主題受密碼保護,請輸入用戶名和密碼以訂閱。",
|
"account_basics_password_title": "密碼",
|
||||||
"subscribe_dialog_login_password_label": "密碼",
|
"account_basics_tier_payment_overdue": "你的付款已逾期。請更新你的付款方式,否則你的帳戶將很快被降級。",
|
||||||
"subscribe_dialog_login_title": "請登錄",
|
"account_basics_tier_canceled_subscription": "你的訂閱已取消,並將在 {{date}} 降級為免費帳戶。",
|
||||||
"subscribe_dialog_login_username_label": "用戶名,例如 phil",
|
"account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} 總存儲空間",
|
||||||
"subscribe_dialog_subscribe_base_url_label": "服務地址地址",
|
"account_upgrade_dialog_tier_selected_label": "已選",
|
||||||
"subscribe_dialog_subscribe_button_cancel": "取消",
|
"account_upgrade_dialog_tier_current_label": "當前",
|
||||||
"subscribe_dialog_subscribe_button_generate_topic_name": "生成名稱",
|
"account_upgrade_dialog_button_cancel": "取消",
|
||||||
"subscribe_dialog_subscribe_button_subscribe": "訂閱",
|
"account_upgrade_dialog_button_redirect_signup": "立即註冊",
|
||||||
"subscribe_dialog_subscribe_description": "主題可能不受密碼保護,因此請選擇一個不容易被猜中的名字。訂閱後,你可以使用 PUT/POST 通知。",
|
"account_tokens_title": "訪問令牌",
|
||||||
"subscribe_dialog_subscribe_title": "訂閱主題",
|
"account_tokens_description": "通過 ntfy API 發布和訂閱時使用訪問令牌,因此你不必發送你的帳戶憑證。查看<Link>文檔</Link>以了解更多資訊。",
|
||||||
"subscribe_dialog_subscribe_topic_placeholder": "主題名,例如 phil_alerts",
|
"account_tokens_table_token_header": "令牌",
|
||||||
"subscribe_dialog_subscribe_use_another_background_info": "當網頁程式未開啟, 將不會收到來自其他伺服器的通知",
|
"account_tokens_table_label_header": "標籤",
|
||||||
"subscribe_dialog_subscribe_use_another_label": "使用其他伺服器",
|
"account_tokens_table_last_access_header": "最後訪問",
|
||||||
"web_push_subscription_expiring_body": "開啟ntfy以繼續接收通知",
|
"account_tokens_table_expires_header": "過期",
|
||||||
|
"account_tokens_table_never_expires": "永不過期",
|
||||||
|
"account_tokens_table_current_session": "當前瀏覽器會話",
|
||||||
|
"common_copy_to_clipboard": "複製到剪貼板",
|
||||||
|
"account_tokens_table_copied_to_clipboard": "已複製訪問令牌",
|
||||||
|
"account_tokens_table_cannot_delete_or_edit": "無法編輯或刪除當前會話令牌",
|
||||||
|
"account_tokens_table_create_token_button": "創建訪問令牌",
|
||||||
|
"account_tokens_table_last_origin_tooltip": "於IP地址 {{ip}},點擊查找",
|
||||||
|
"account_tokens_dialog_label": "標籤,例如:Radarr 通知",
|
||||||
|
"account_tokens_dialog_button_create": "創建令牌",
|
||||||
|
"account_tokens_dialog_button_update": "更新令牌",
|
||||||
|
"account_basics_tier_interval_monthly": "每月",
|
||||||
|
"account_basics_tier_interval_yearly": "每年",
|
||||||
|
"account_upgrade_dialog_interval_monthly": "每月",
|
||||||
|
"account_upgrade_dialog_interval_yearly": "每年",
|
||||||
|
"account_upgrade_dialog_interval_yearly_discount_save": "節省 {{discount}}%",
|
||||||
|
"account_upgrade_dialog_interval_yearly_discount_save_up_to": "節省高達 {{discount}}%",
|
||||||
|
"account_upgrade_dialog_tier_features_no_reservations": "無保留主題",
|
||||||
|
"account_upgrade_dialog_tier_price_per_month": "月",
|
||||||
|
"account_upgrade_dialog_tier_price_billed_monthly": "{{price}} 每年。按月計費。",
|
||||||
|
"account_upgrade_dialog_tier_price_billed_yearly": "{{價格}} 按年計費。節省 {{save}}。",
|
||||||
|
"account_upgrade_dialog_billing_contact_email": "有關賬單問題,請直接<Link>聯繫我們 </Link>。",
|
||||||
|
"account_upgrade_dialog_billing_contact_website": "有關賬單問題,請參考我們的<Link>網站 </Link>。",
|
||||||
|
"publish_dialog_call_item": "撥打電話 {{number}}",
|
||||||
|
"publish_dialog_call_label": "撥號",
|
||||||
|
"publish_dialog_chip_call_label": "撥號",
|
||||||
|
"publish_dialog_chip_call_no_verified_numbers_tooltip": "未驗證的電話號碼",
|
||||||
|
"account_basics_phone_numbers_title": "電話號碼",
|
||||||
|
"account_basics_phone_numbers_description": "電話通知",
|
||||||
|
"account_basics_phone_numbers_dialog_description": "要使用來電通知功能,你需要新增並驗證至少一個電話號碼。可以通過短信或電話驗證。",
|
||||||
|
"account_basics_phone_numbers_dialog_code_label": "驗證碼",
|
||||||
|
"account_basics_phone_numbers_dialog_code_placeholder": "例如:123456",
|
||||||
|
"account_basics_phone_numbers_dialog_check_verification_button": "確認碼",
|
||||||
|
"account_basics_phone_numbers_dialog_channel_sms": "短信",
|
||||||
|
"account_basics_phone_numbers_dialog_channel_call": "撥打",
|
||||||
|
"publish_dialog_call_reset": "清空撥號",
|
||||||
|
"account_basics_phone_numbers_no_phone_numbers_yet": "無可執行的電話號碼",
|
||||||
|
"account_basics_phone_numbers_dialog_title": "新增電話號碼",
|
||||||
|
"account_basics_phone_numbers_copied_to_clipboard": "電話號碼已複製到剪貼板",
|
||||||
|
"account_basics_phone_numbers_dialog_number_label": "電話號碼",
|
||||||
|
"account_basics_phone_numbers_dialog_number_placeholder": "例如:+1222333444",
|
||||||
|
"account_usage_calls_title": "已撥打電話",
|
||||||
|
"account_usage_calls_none": "此帳號無法撥打電話",
|
||||||
|
"account_upgrade_dialog_tier_features_reservations_one": "保留一條主題",
|
||||||
|
"account_upgrade_dialog_tier_features_emails_one": "每日一封郵件",
|
||||||
|
"account_upgrade_dialog_tier_features_calls_one": "每日一通電話",
|
||||||
|
"account_basics_phone_numbers_dialog_verify_button_sms": "發送資訊",
|
||||||
|
"account_basics_phone_numbers_dialog_verify_button_call": "撥打電話",
|
||||||
|
"account_upgrade_dialog_tier_features_messages_one": "每日一條訊息",
|
||||||
|
"account_upgrade_dialog_tier_features_calls_other": "每日{{calls}} 通電話",
|
||||||
|
"account_upgrade_dialog_tier_features_no_calls": "沒有電話",
|
||||||
"web_push_subscription_expiring_title": "通知會被暫停",
|
"web_push_subscription_expiring_title": "通知會被暫停",
|
||||||
"web_push_unknown_notification_body": "你可能需要開啟網頁來更新ntfy",
|
"web_push_subscription_expiring_body": "開啟ntfy以繼續接收通知",
|
||||||
"web_push_unknown_notification_title": "接收到不明通知"
|
"web_push_unknown_notification_title": "接收到不明通知",
|
||||||
|
"web_push_unknown_notification_body": "你可能需要開啟網頁來更新ntfy"
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,17 +124,9 @@ class Notifier {
|
||||||
return window.location.protocol === "https:" || window.location.hostname.match("^127.") || window.location.hostname === "localhost";
|
return window.location.protocol === "https:" || window.location.hostname.match("^127.") || window.location.hostname === "localhost";
|
||||||
}
|
}
|
||||||
|
|
||||||
// no PushManager when not installed, but it _is_ supported.
|
|
||||||
iosSupportedButInstallRequired() {
|
iosSupportedButInstallRequired() {
|
||||||
return (
|
// no PushManager when not installed, but it _is_ supported.
|
||||||
config.enable_web_push &&
|
return config.enable_web_push && "serviceWorker" in navigator && window.navigator.standalone === false;
|
||||||
// a service worker exists
|
|
||||||
"serviceWorker" in navigator &&
|
|
||||||
// but the pushmanager API is missing, which implies we're on an iOS device without installing
|
|
||||||
!("PushManager" in window) &&
|
|
||||||
// check that this is the case by checking for `standalone`, which only exists on Safari
|
|
||||||
window.navigator.standalone === false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,20 +130,14 @@ export const hashCode = (s) => {
|
||||||
return hash;
|
return hash;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* convert `i18n.language` style str (e.g.: `en_US`) to kebab-case (e.g.: `en-US`),
|
|
||||||
* which is expected by `<html lang>` and `Intl.DateTimeFormat`
|
|
||||||
*/
|
|
||||||
export const getKebabCaseLangStr = (language) => language.replace(/_/g, "-");
|
|
||||||
|
|
||||||
export const formatShortDateTime = (timestamp, language) =>
|
export const formatShortDateTime = (timestamp, language) =>
|
||||||
new Intl.DateTimeFormat(getKebabCaseLangStr(language), {
|
new Intl.DateTimeFormat(language, {
|
||||||
dateStyle: "short",
|
dateStyle: "short",
|
||||||
timeStyle: "short",
|
timeStyle: "short",
|
||||||
}).format(new Date(timestamp * 1000));
|
}).format(new Date(timestamp * 1000));
|
||||||
|
|
||||||
export const formatShortDate = (timestamp, language) =>
|
export const formatShortDate = (timestamp, language) =>
|
||||||
new Intl.DateTimeFormat(getKebabCaseLangStr(language), { dateStyle: "short" }).format(new Date(timestamp * 1000));
|
new Intl.DateTimeFormat(language, { dateStyle: "short" }).format(new Date(timestamp * 1000));
|
||||||
|
|
||||||
export const formatBytes = (bytes, decimals = 2) => {
|
export const formatBytes = (bytes, decimals = 2) => {
|
||||||
if (bytes === 0) return "0 bytes";
|
if (bytes === 0) return "0 bytes";
|
||||||
|
|
|
@ -11,7 +11,7 @@ import ActionBar from "./ActionBar";
|
||||||
import Preferences from "./Preferences";
|
import Preferences from "./Preferences";
|
||||||
import subscriptionManager from "../app/SubscriptionManager";
|
import subscriptionManager from "../app/SubscriptionManager";
|
||||||
import userManager from "../app/UserManager";
|
import userManager from "../app/UserManager";
|
||||||
import { expandUrl, getKebabCaseLangStr } from "../app/utils";
|
import { expandUrl } from "../app/utils";
|
||||||
import ErrorBoundary from "./ErrorBoundary";
|
import ErrorBoundary from "./ErrorBoundary";
|
||||||
import routes from "./routes";
|
import routes from "./routes";
|
||||||
import { useAccountListener, useBackgroundProcesses, useConnectionListeners, useWebPushTopics } from "./hooks";
|
import { useAccountListener, useBackgroundProcesses, useConnectionListeners, useWebPushTopics } from "./hooks";
|
||||||
|
@ -56,7 +56,7 @@ const App = () => {
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
document.documentElement.setAttribute("lang", getKebabCaseLangStr(i18n.language));
|
document.documentElement.setAttribute("lang", i18n.language);
|
||||||
document.dir = languageDir;
|
document.dir = languageDir;
|
||||||
}, [i18n.language, languageDir]);
|
}, [i18n.language, languageDir]);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue