Compare commits

...

79 Commits

Author SHA1 Message Date
d9bcea518b
Fix selected goal 2023-09-29 11:03:33 +01:00
11ead3e8bd
Close stream dialog starting new manual stream 2023-09-29 10:50:25 +01:00
1a07577ecd chore: Update translations 2023-09-25 08:54:11 +00:00
3faec9e1d8
Add license 2023-09-25 09:51:52 +01:00
ed50749368
Fix expiration check 2023-09-19 13:00:02 +01:00
6c127d4e9b Merge pull request 'fix: add background' (#99) from music into main
Reviewed-on: Kieran/stream#99
2023-09-19 09:16:44 +00:00
verbiricha
6e1979a3b4 fix: add background 2023-09-19 10:47:21 +02:00
df4587b679 chore: Update translations 2023-09-19 08:43:06 +00:00
68812cc3bf Merge pull request 'feat: add music widget' (#98) from music into main
Reviewed-on: Kieran/stream#98
Reviewed-by: Kieran <kieran@noreply.localhost>
2023-09-19 08:42:27 +00:00
verbiricha
fb4201efe0 fix: run prettier 2023-09-19 08:38:50 +02:00
verbiricha
f5b67a2293 feat: add music widget 2023-09-19 08:37:10 +02:00
a309737d8c
Add limit 1 to rates 2023-09-16 23:08:47 +01:00
193f78a967 chore: Update translations 2023-09-16 22:04:26 +00:00
8c0afbe63d
Use rates 2023-09-16 23:03:11 +01:00
c926586647
Merge branch 'rolznz-fix/settings-icon' 2023-09-15 10:24:46 +01:00
6de9f3dfe3
chore: Update translations 2023-09-15 10:22:34 +01:00
db00b6db1a
Add new langs 2023-09-15 10:22:33 +01:00
Roland Bewick
7d52570c17
chore: optimize jpg images with optimizilla 2023-09-15 10:22:33 +01:00
Roland Bewick
4d677f4568
chore: update all login images, use srcset 2023-09-15 10:22:33 +01:00
Roland Bewick
7e4c176423
chore: use jpg for login-start images 2023-09-15 10:22:33 +01:00
Roland Bewick
b7338cb2fe
chore: progressive image POC 2023-09-15 10:22:33 +01:00
2fc28eb3fc
chore: Update translations 2023-09-15 10:22:32 +01:00
c07ebc869e
Add new langs 2023-09-15 10:22:32 +01:00
af79f8f201 chore: Update translations 2023-09-15 09:22:12 +00:00
c5ce120b25
Merge branch 'rolznz-experimental/progressive-image' 2023-09-15 10:19:46 +01:00
0aa31db4b4
Merge branch 'rolznz-experimental/progressive-image' 2023-09-15 10:18:37 +01:00
3b3e2ba50d
chore: Update translations 2023-09-15 10:18:21 +01:00
f8f793e7f1
Add new langs 2023-09-15 10:18:20 +01:00
Roland Bewick
8380279963 chore: optimize jpg images with optimizilla 2023-09-15 10:30:00 +07:00
Roland Bewick
8e238deff4 chore: update all login images, use srcset 2023-09-15 10:22:56 +07:00
f3e4c13625 chore: Update translations 2023-09-12 15:20:04 +00:00
dd5d6aa65e
Add new langs 2023-09-12 16:19:13 +01:00
Roland Bewick
2bc773241f chore: use jpg for login-start images 2023-09-12 12:36:28 +07:00
Roland Bewick
507b0b94bf chore: progressive image POC 2023-09-12 12:22:25 +07:00
Roland Bewick
24e1deb35c fix: settings icon 2023-09-12 11:54:32 +07:00
3dd105c13b chore: Update translations 2023-09-11 09:11:28 +00:00
b64c51e02d Merge pull request 'WIP - make zaps prettier. fix goal selection.' (#95) from TheGrinder/stream:main into main
Reviewed-on: Kieran/stream#95
Reviewed-by: verbiricha <bandarra@protonmail.com>
Reviewed-by: Kieran <kieran@noreply.localhost>
2023-09-11 09:11:00 +00:00
dedf9fbf1a Merge pull request 'feat: text to speech and animation for zap alerts' (#96) from zap-alerts into main
Reviewed-on: Kieran/stream#96
Reviewed-by: Kieran <kieran@noreply.localhost>
2023-09-11 09:10:13 +00:00
verbiricha
fc37cfe92d feat: add volume control 2023-09-10 14:03:13 +02:00
verbiricha
216311951b fix: run prettier 2023-09-10 11:49:27 +02:00
verbiricha
29b208b136 feat: text to speech and animation for zap alerts 2023-09-10 11:27:47 +02:00
TheGrinder
476e07ee21 make zaps prettier. fix goal selection. 2023-09-09 20:06:07 +02:00
15be10aa02 chore: Update translations 2023-09-07 15:00:02 +00:00
000a6a9ea2 Merge pull request 'chore: update bitcoin connect package' (#92) from roland/stream:chore/update-bitcoin-connect into main
Reviewed-on: Kieran/stream#92
Reviewed-by: Kieran <kieran@noreply.localhost>
2023-09-07 14:59:15 +00:00
Roland Bewick
4ec8241cc0 chore: update bitcoin connect package
- fix breaking change with NIP-46 get_balance method
- add help screen and some minor UX improvements
2023-09-07 21:29:58 +07:00
4b7e54a16d
Use flags directly 2023-09-06 16:50:07 +01:00
660fbe746b
Add flags 2023-09-06 16:50:07 +01:00
64012932f6 chore: Update translations 2023-09-06 14:49:47 +00:00
a278c530e6 Merge pull request 'feat: allow to configure a stream goal' (#90) from stream-goal into main
Reviewed-on: Kieran/stream#90
Reviewed-by: Kieran <kieran@noreply.localhost>
2023-09-06 14:48:39 +00:00
verbiricha
19fcb58104 fix: extract translations 2023-09-06 14:48:39 +00:00
verbiricha
fd86069420 chore: run prettier 2023-09-06 14:48:39 +00:00
verbiricha
9fd59817d9 feat: allow to configure a stream goal 2023-09-06 14:48:39 +00:00
3da6f5439b chore: Update translations 2023-09-06 14:28:24 +00:00
d20919e439
Enable other langs 2023-09-06 15:27:07 +01:00
600672cceb
Upgrade pkgs 2023-09-06 15:27:07 +01:00
605aa17829
Fix modal UI paddings 2023-09-06 15:27:07 +01:00
348f98931b chore: Update translations 2023-09-01 19:10:56 +00:00
567258ce73
Prettier 2023-09-01 20:09:32 +01:00
0c06f88a2d
Lang selector 2023-09-01 20:09:32 +01:00
5a90164922
extract lang 2023-09-01 20:09:31 +01:00
eddf9232d6
New settings page 2023-09-01 20:09:30 +01:00
3442ac6c10 chore: Update translations 2023-09-01 11:42:09 +00:00
857226e2a5
New login flow 2023-09-01 12:39:19 +01:00
e5a67a24c5
Run prettier 2023-09-01 12:39:19 +01:00
a712a223f1 chore: Update translations 2023-09-01 09:44:55 +00:00
b16be0930c Merge pull request 'feat: settings page' (#87) from roland/stream:feat/connect-wallet into main
Reviewed-on: Kieran/stream#87
2023-09-01 09:43:52 +00:00
Roland Bewick
aa4c8378a1 feat: new login dialog header 2023-08-29 22:56:02 +07:00
Roland Bewick
3b0345a845 chore: only show login dialog if nip-07 extension is not present 2023-08-29 22:04:11 +07:00
Roland Bewick
c327ae870a Merge remote-tracking branch 'upstream/main' into feat/connect-wallet 2023-08-29 21:39:00 +07:00
25b0fb67b1 chore: Update translations 2023-08-28 14:55:47 +00:00
c9cd7ffc13
Cleanup 2023-08-28 15:54:50 +01:00
2754cb1581
Setup translations 2023-08-28 15:45:44 +01:00
b96002abe9
bugfix view count 2023-08-28 15:20:21 +01:00
3dcc593ab5 chore: Update translations 2023-08-28 14:13:44 +00:00
b5033798c4
Widgets 2023-08-28 15:07:59 +01:00
Roland Bewick
01b2d01dc8 Merge remote-tracking branch 'upstream/main' into feat/connect-wallet 2023-08-28 18:36:21 +07:00
Roland Bewick
ce24d0e9c2 chore: improve nsec input, fix copy nsec 2023-08-28 18:20:28 +07:00
9bbbd513c2
Fix timer
fixes #66
2023-08-28 12:17:24 +01:00
Roland Bewick
afd3c9a232 feat: add basic settings page 2023-08-26 22:26:49 +07:00
99 changed files with 16386 additions and 337 deletions

View File

@ -59,4 +59,4 @@ steps:
volumes:
- name: cache
claim:
name: docker-cache
name: docker-cache

4
.prettierignore Normal file
View File

@ -0,0 +1,4 @@
.yarn/
.vscode/
node_modules/
build/

21
LICENSE Normal file
View File

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

View File

@ -4,6 +4,7 @@
"dependencies": {
"@emoji-mart/data": "^1.1.2",
"@emoji-mart/react": "^1.1.1",
"@getalby/bitcoin-connect-react": "^1.1.0",
"@noble/curves": "^1.1.0",
"@noble/hashes": "^1.3.1",
"@radix-ui/react-collapsible": "^1.0.3",
@ -13,9 +14,9 @@
"@radix-ui/react-toggle": "^1.0.3",
"@react-hook/resize-observer": "^1.2.6",
"@scure/base": "^1.1.1",
"@snort/shared": "^1.0.4",
"@snort/system": "^1.0.17",
"@snort/system-react": "^1.0.12",
"@snort/shared": "^1.0.5",
"@snort/system": "^1.0.18",
"@snort/system-react": "^1.0.13",
"@szhsin/react-menu": "^4.0.2",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.0.0",
@ -25,6 +26,7 @@
"@webscopeio/react-textarea-autocomplete": "^4.9.2",
"buffer": "^6.0.3",
"emoji-mart": "^5.5.2",
"flag-icons": "^6.11.0",
"hls.js": "^1.4.6",
"lodash": "^4.17.21",
"lodash.uniqby": "^4.7.0",

View File

@ -88,5 +88,12 @@
<symbol id="user-x" viewBox="0 0 24 24" fill="none">
<path d="M16.5 16L21.5 21M21.5 16L16.5 21M15.5 3.29076C16.9659 3.88415 18 5.32131 18 7C18 8.67869 16.9659 10.1159 15.5 10.7092M12 15H8C6.13623 15 5.20435 15 4.46927 15.3045C3.48915 15.7105 2.71046 16.4892 2.30448 17.4693C2 18.2044 2 19.1362 2 21M13.5 7C13.5 9.20914 11.7091 11 9.5 11C7.29086 11 5.5 9.20914 5.5 7C5.5 4.79086 7.29086 3 9.5 3C11.7091 3 13.5 4.79086 13.5 7Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</symbol>
<symbol id="settings" viewBox="0 0 24 24" fill="none">
<path d="M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.7273 14.7273C18.6063 15.0015 18.5702 15.3056 18.6236 15.6005C18.6771 15.8954 18.8177 16.1676 19.0273 16.3818L19.0818 16.4364C19.2509 16.6052 19.385 16.8057 19.4765 17.0265C19.568 17.2472 19.6151 17.4838 19.6151 17.7227C19.6151 17.9617 19.568 18.1983 19.4765 18.419C19.385 18.6397 19.2509 18.8402 19.0818 19.0091C18.913 19.1781 18.7124 19.3122 18.4917 19.4037C18.271 19.4952 18.0344 19.5423 17.7955 19.5423C17.5565 19.5423 17.3199 19.4952 17.0992 19.4037C16.8785 19.3122 16.678 19.1781 16.5091 19.0091L16.4545 18.9545C16.2403 18.745 15.9682 18.6044 15.6733 18.5509C15.3784 18.4974 15.0742 18.5335 14.8 18.6545C14.5311 18.7698 14.3018 18.9611 14.1403 19.205C13.9788 19.4489 13.8921 19.7347 13.8909 20.0273V20.1818C13.8909 20.664 13.6994 21.1265 13.3584 21.4675C13.0174 21.8084 12.5549 22 12.0727 22C11.5905 22 11.1281 21.8084 10.7871 21.4675C10.4461 21.1265 10.2545 20.664 10.2545 20.1818V20.1C10.2475 19.7991 10.1501 19.5073 9.97501 19.2625C9.79991 19.0176 9.55521 18.8312 9.27273 18.7273C8.99853 18.6063 8.69437 18.5702 8.39947 18.6236C8.10456 18.6771 7.83244 18.8177 7.61818 19.0273L7.56364 19.0818C7.39478 19.2509 7.19425 19.385 6.97353 19.4765C6.7528 19.568 6.51621 19.6151 6.27727 19.6151C6.03834 19.6151 5.80174 19.568 5.58102 19.4765C5.36029 19.385 5.15977 19.2509 4.99091 19.0818C4.82186 18.913 4.68775 18.7124 4.59626 18.4917C4.50476 18.271 4.45766 18.0344 4.45766 17.7955C4.45766 17.5565 4.50476 17.3199 4.59626 17.0992C4.68775 16.8785 4.82186 16.678 4.99091 16.5091L5.04545 16.4545C5.25503 16.2403 5.39562 15.9682 5.4491 15.6733C5.50257 15.3784 5.46647 15.0742 5.34545 14.8C5.23022 14.5311 5.03887 14.3018 4.79497 14.1403C4.55107 13.9788 4.26526 13.8921 3.97273 13.8909H3.81818C3.33597 13.8909 2.87351 13.6994 2.53253 13.3584C2.19156 13.0174 2 12.5549 2 12.0727C2 11.5905 2.19156 11.1281 2.53253 10.7871C2.87351 10.4461 3.33597 10.2545 3.81818 10.2545H3.9C4.2009 10.2475 4.49273 10.1501 4.73754 9.97501C4.98236 9.79991 5.16883 9.55521 5.27273 9.27273C5.39374 8.99853 5.42984 8.69437 5.37637 8.39947C5.3229 8.10456 5.18231 7.83244 4.97273 7.61818L4.91818 7.56364C4.74913 7.39478 4.61503 7.19425 4.52353 6.97353C4.43203 6.7528 4.38493 6.51621 4.38493 6.27727C4.38493 6.03834 4.43203 5.80174 4.52353 5.58102C4.61503 5.36029 4.74913 5.15977 4.91818 4.99091C5.08704 4.82186 5.28757 4.68775 5.50829 4.59626C5.72901 4.50476 5.96561 4.45766 6.20455 4.45766C6.44348 4.45766 6.68008 4.50476 6.9008 4.59626C7.12152 4.68775 7.32205 4.82186 7.49091 4.99091L7.54545 5.04545C7.75971 5.25503 8.03183 5.39562 8.32674 5.4491C8.62164 5.50257 8.9258 5.46647 9.2 5.34545H9.27273C9.54161 5.23022 9.77093 5.03887 9.93245 4.79497C10.094 4.55107 10.1807 4.26526 10.1818 3.97273V3.81818C10.1818 3.33597 10.3734 2.87351 10.7144 2.53253C11.0553 2.19156 11.5178 2 12 2C12.4822 2 12.9447 2.19156 13.2856 2.53253C13.6266 2.87351 13.8182 3.33597 13.8182 3.81818V3.9C13.8193 4.19253 13.906 4.47834 14.0676 4.72224C14.2291 4.96614 14.4584 5.15749 14.7273 5.27273C15.0015 5.39374 15.3056 5.42984 15.6005 5.37637C15.8954 5.3229 16.1676 5.18231 16.3818 4.97273L16.4364 4.91818C16.6052 4.74913 16.8057 4.61503 17.0265 4.52353C17.2472 4.43203 17.4838 4.38493 17.7227 4.38493C17.9617 4.38493 18.1983 4.43203 18.419 4.52353C18.6397 4.61503 18.8402 4.74913 19.0091 4.91818C19.1781 5.08704 19.3122 5.28757 19.4037 5.50829C19.4952 5.72901 19.5423 5.96561 19.5423 6.20455C19.5423 6.44348 19.4952 6.68008 19.4037 6.9008C19.3122 7.12152 19.1781 7.32205 19.0091 7.49091L18.9545 7.54545C18.745 7.75971 18.6044 8.03183 18.5509 8.32674C18.4974 8.62164 18.5335 8.9258 18.6545 9.2V9.27273C18.7698 9.54161 18.9611 9.77093 19.205 9.93245C19.4489 10.094 19.7347 10.1807 20.0273 10.1818H20.1818C20.664 10.1818 21.1265 10.3734 21.4675 10.7144C21.8084 11.0553 22 11.5178 22 12C22 12.4822 21.8084 12.9447 21.4675 13.2856C21.1265 13.6266 20.664 13.8182 20.1818 13.8182H20.1C19.8075 13.8193 19.5217 13.906 19.2778 14.0676C19.0339 14.2291 18.8425 14.4584 18.7273 14.7273Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</symbol>
<symbol id="widget" viewBox="0 0 24 24" fill="none">
<path d="M11 4H7.8C6.11984 4 5.27976 4 4.63803 4.32698C4.07354 4.6146 3.6146 5.07354 3.32698 5.63803C3 6.27976 3 7.11984 3 8.8V16.2C3 17.8802 3 18.7202 3.32698 19.362C3.6146 19.9265 4.07354 20.3854 4.63803 20.673C5.27976 21 6.11984 21 7.8 21H15.2C16.8802 21 17.7202 21 18.362 20.673C18.9265 20.3854 19.3854 19.9265 19.673 19.362C20 18.7202 20 17.8802 20 16.2V13M13 17H7M15 13H7M20.1213 3.87868C21.2929 5.05025 21.2929 6.94975 20.1213 8.12132C18.9497 9.29289 17.0503 9.29289 15.8787 8.12132C14.7071 6.94975 14.7071 5.05025 15.8787 3.87868C17.0503 2.70711 18.9497 2.70711 20.1213 3.87868Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</symbol>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -5,16 +5,17 @@ import { Icon } from "./icon";
export interface CopyProps {
text: string;
maxSize?: number;
hideText?: boolean;
className?: string;
}
export default function Copy({ text, maxSize = 32, className }: CopyProps) {
export default function Copy({ text, maxSize = 32, className, hideText }: CopyProps) {
const { copy, copied } = useCopy();
const sliceLength = maxSize / 2;
const trimmed = text.length > maxSize ? `${text.slice(0, sliceLength)}...${text.slice(-sliceLength)}` : text;
return (
<div className={`copy${className ? ` ${className}` : ""}`} onClick={() => copy(text)}>
<span className="body">{trimmed}</span>
{!hideText && <span className="body">{trimmed}</span>}
<span className="icon" style={{ color: copied ? "var(--success)" : "var(--highlight)" }}>
{copied ? <Icon name="check" size={14} /> : <Icon name="copy" size={14} />}
</span>

View File

@ -78,7 +78,11 @@ export function FileUploader({ defaultImage, onClear, onFileUpload }: FileUpload
<div className="file-uploader-container">
<label className="file-uploader">
<input type="file" onChange={onFileChange} />
{isUploading ? "Uploading..." : "Add File"}
{isUploading ? (
<FormattedMessage defaultMessage="Uploading..." />
) : (
<FormattedMessage defaultMessage="Add File" />
)}
</label>
<div className="file-uploader-preview">
{img?.length > 0 && (

View File

@ -6,19 +6,20 @@ import Confetti from "react-confetti";
import { type NostrEvent } from "@snort/system";
import { useUserProfile } from "@snort/system-react";
import { findTag } from "utils";
import { eventToLink, findTag } from "utils";
import { formatSats } from "number";
import usePreviousValue from "hooks/usePreviousValue";
import { SendZapsDialog } from "element/send-zap";
import { useZaps } from "hooks/goals";
import { getName } from "element/profile";
import { Icon } from "./icon";
import { FormattedMessage } from "react-intl";
import { useZaps } from "hooks/zaps";
export function Goal({ ev }: { ev: NostrEvent }) {
const profile = useUserProfile(ev.pubkey);
const zapTarget = profile?.lud16 ?? profile?.lud06;
const zaps = useZaps(ev, true);
const link = eventToLink(ev);
const zaps = useZaps(link, true);
const goalAmount = useMemo(() => {
const amount = findTag(ev, "amount");
return amount ? Number(amount) / 1000 : null;

View File

@ -1,7 +1,8 @@
import "./live-chat.css";
import { FormattedMessage } from "react-intl";
import { EventKind, NostrPrefix, NostrLink, ParsedZap, NostrEvent, parseZap, encodeTLV } from "@snort/system";
import { unixNow, unwrap } from "@snort/shared";
import { useEffect, useMemo } from "react";
import { unixNow } from "@snort/shared";
import { useMemo } from "react";
import uniqBy from "lodash.uniqby";
import { Icon } from "element/icon";
@ -11,20 +12,18 @@ import { Profile } from "element/profile";
import { ChatMessage } from "element/chat-message";
import { Goal } from "element/goal";
import { Badge } from "element/badge";
import { NewGoalDialog } from "element/new-goal";
import { WriteMessage } from "element/write-message";
import useEmoji, { packId } from "hooks/emoji";
import { useLiveChatFeed } from "hooks/live-chat";
import { useMutedPubkeys } from "hooks/lists";
import { useBadges } from "hooks/badges";
import { useLogin } from "hooks/login";
import useTopZappers from "hooks/top-zappers";
import { useAddress } from "hooks/event";
import { formatSats } from "number";
import { WEEK, LIVE_STREAM_CHAT } from "const";
import { findTag, getTagValues, getHost } from "utils";
import { System } from "index";
import { FormattedMessage } from "react-intl";
import { TopZappers } from "element/top-zappers";
export interface LiveChatOptions {
canWrite?: boolean;
@ -49,28 +48,6 @@ function BadgeAward({ ev }: { ev: NostrEvent }) {
);
}
function TopZappers({ zaps }: { zaps: ParsedZap[] }) {
const zappers = useTopZappers(zaps);
return (
<>
{zappers.map(({ pubkey, total }) => {
return (
<div className="top-zapper" key={pubkey}>
{pubkey === "anon" ? (
<p className="top-zapper-name">Anon</p>
) : (
<Profile pubkey={pubkey} options={{ showName: false }} />
)}
<Icon name="zap-filled" className="zap-icon" />
<p className="top-zapper-amount">{formatSats(total)}</p>
</div>
);
})}
</>
);
}
export function LiveChat({
link,
ev,
@ -87,11 +64,6 @@ export function LiveChat({
const host = getHost(ev);
const feed = useLiveChatFeed(link, goal ? [goal.id] : undefined);
const login = useLogin();
useEffect(() => {
const pubkeys = [...new Set(feed.zaps.flatMap(a => [a.pubkey, unwrap(findTag(a, "p"))]))];
System.ProfileLoader.TrackMetadata(pubkeys);
return () => System.ProfileLoader.UntrackMetadata(pubkeys);
}, [feed.zaps]);
const started = useMemo(() => {
const starts = findTag(ev, "starts");
return starts ? Number(starts) : unixNow() - WEEK;
@ -111,7 +83,6 @@ export function LiveChat({
const events = useMemo(() => {
return [...feed.messages, ...feed.zaps, ...awards].sort((a, b) => b.created_at - a.created_at);
}, [feed.messages, feed.zaps, awards]);
const streamer = getHost(ev);
const naddr = useMemo(() => {
if (ev) {
return encodeTLV(NostrPrefix.Address, findTag(ev, "d") ?? "", undefined, ev.kind, ev.pubkey);
@ -145,7 +116,6 @@ export function LiveChat({
<TopZappers zaps={zaps} />
</div>
{goal && <Goal ev={goal} />}
{login?.pubkey === streamer && <NewGoalDialog link={link} />}
</div>
)}
<div className="messages">
@ -159,7 +129,7 @@ export function LiveChat({
<ChatMessage
badges={badges}
emojiPacks={allEmojiPacks}
streamer={streamer}
streamer={host}
ev={a}
key={a.id}
reactions={feed.reactions}
@ -167,7 +137,7 @@ export function LiveChat({
);
}
case EventKind.ZapReceipt: {
const zap = zaps.find(b => b.id === a.id && b.receiver === streamer);
const zap = zaps.find(b => b.id === a.id && b.receiver === host);
if (zap) {
return <ChatZap zap={zap} key={a.id} />;
}

View File

@ -1,38 +1,56 @@
import "./login-signup.css";
import LoginHeader from "../login-start.jpg";
import LoginHeader2x from "../login-start@2x.jpg";
import LoginVault from "../login-vault.jpg";
import LoginVault2x from "../login-vault@2x.jpg";
import LoginProfile from "../login-profile.jpg";
import LoginProfile2x from "../login-profile@2x.jpg";
import LoginKey from "../login-key.jpg";
import LoginKey2x from "../login-key@2x.jpg";
import LoginWallet from "../login-wallet.jpg";
import LoginWallet2x from "../login-wallet@2x.jpg";
import { CSSProperties, useState } from "react";
import { FormattedMessage, FormattedNumber, useIntl } from "react-intl";
import { EventPublisher, UserMetadata } from "@snort/system";
import { schnorr } from "@noble/curves/secp256k1";
import { bytesToHex } from "@noble/curves/abstract/utils";
import { LNURL, bech32ToHex, getPublicKey } from "@snort/shared";
import { VoidApi } from "@void-cat/api";
import AsyncButton from "./async-button";
import { Login, System } from "index";
import { Icon } from "./icon";
import Copy from "./copy";
import { hexToBech32, openFile } from "utils";
import { VoidApi } from "@void-cat/api";
import { LoginType } from "login";
import { FormattedMessage } from "react-intl";
import { DefaultProvider, StreamProviderInfo } from "providers";
import { Nip103StreamProvider } from "providers/zsz";
enum Stage {
Login = 0,
Details = 1,
SaveKey = 2,
LoginInput = 1,
Details = 2,
LnAddress = 3,
SaveKey = 4,
}
export function LoginSignup({ close }: { close: () => void }) {
const [error, setError] = useState("");
const [stage, setStage] = useState(Stage.Login);
const [username, setUsername] = useState("");
const [lnAddress, setLnAddress] = useState("");
const [providerInfo, setProviderInfo] = useState<StreamProviderInfo>();
const [avatar, setAvatar] = useState("");
const [key, setNewKey] = useState("");
const { formatMessage } = useIntl();
const hasNostrExtension = "nostr" in window && window.nostr;
async function doLogin() {
function doLoginNsec() {
try {
const pub = await EventPublisher.nip7();
if (pub) {
Login.loginWithPubkey(pub.pubKey, LoginType.Nip7);
close();
}
const hexKey = key.startsWith("nsec") ? bech32ToHex(key) : key;
Login.loginWithPrivateKey(hexKey);
close();
} catch (e) {
console.error(e);
if (e instanceof Error) {
@ -43,9 +61,25 @@ export function LoginSignup({ close }: { close: () => void }) {
}
}
async function loginNip7() {
try {
const nip7 = await EventPublisher.nip7();
if (nip7) {
Login.loginWithPubkey(nip7.pubKey, LoginType.Nip7);
}
} catch (e) {
if (e instanceof Error) {
setError(e.message);
} else {
setError(e as string);
}
}
}
function createAccount() {
const newKey = bytesToHex(schnorr.utils.randomPrivateKey());
setNewKey(newKey);
setLnAddress(`${getPublicKey(newKey)}@zap.stream`);
setStage(Stage.Details);
}
@ -72,87 +106,234 @@ export function LoginSignup({ close }: { close: () => void }) {
}
}
async function setupProfile() {
const px = new Nip103StreamProvider(DefaultProvider.name, DefaultProvider.url, EventPublisher.privateKey(key));
const info = await px.info();
setProviderInfo(info);
setStage(Stage.LnAddress);
}
async function saveProfile() {
const pub = EventPublisher.privateKey(key);
const profile = {
name: username,
picture: avatar,
lud16: `${pub.pubKey}@zap.stream`,
} as UserMetadata;
try {
// validate LN addreess
try {
const lnurl = new LNURL(lnAddress);
await lnurl.load();
} catch {
throw new Error(
formatMessage({
defaultMessage: "Hmm, your lightning address looks wrong",
})
);
}
const pub = EventPublisher.privateKey(key);
const profile = {
name: username,
picture: avatar,
lud16: lnAddress,
} as UserMetadata;
const ev = await pub.metadata(profile);
console.debug(ev);
System.BroadcastEvent(ev);
const ev = await pub.metadata(profile);
console.debug(ev);
System.BroadcastEvent(ev);
setStage(Stage.SaveKey);
setStage(Stage.SaveKey);
} catch (e) {
if (e instanceof Error) {
setError(e.message);
} else {
setError(e as string);
}
}
}
switch (stage) {
case Stage.Login: {
return (
<>
<h2>
<FormattedMessage defaultMessage="Login" />
</h2>
{"nostr" in window && (
<AsyncButton type="button" className="btn btn-primary" onClick={doLogin}>
<FormattedMessage defaultMessage="Nostr Extension" />
</AsyncButton>
)}
<button type="button" className="btn btn-primary" onClick={createAccount}>
<FormattedMessage defaultMessage="Create Account" />
</button>
{error && <b className="error">{error}</b>}
<img src={LoginHeader as string} srcSet={`${LoginHeader2x} 2x`} className="header-image" />
<div className="content-inner">
<h2>
<FormattedMessage defaultMessage="Create an Account" />
</h2>
<h3>
<FormattedMessage defaultMessage="No emails, just awesomeness!" />
</h3>
<button type="button" className="btn btn-primary btn-block" onClick={createAccount}>
<FormattedMessage defaultMessage="Create Account" />
</button>
<div className="or-divider">
<hr />
<FormattedMessage defaultMessage="OR" />
<hr />
</div>
{hasNostrExtension && (
<>
<AsyncButton type="button" className="btn btn-primary btn-block" onClick={loginNip7}>
<FormattedMessage defaultMessage="Nostr Extension" />
</AsyncButton>
</>
)}
<button type="button" className="btn btn-primary btn-block" onClick={() => setStage(Stage.LoginInput)}>
<FormattedMessage defaultMessage="Login with Private Key (insecure)" />
</button>
{error && <b className="error">{error}</b>}
</div>
</>
);
}
case Stage.LoginInput: {
return (
<>
<img src={LoginVault as string} srcSet={`${LoginVault2x} 2x`} className="header-image" />
<div className="content-inner">
<h2>
<FormattedMessage defaultMessage="Login with private key" />
</h2>
<p>
<FormattedMessage
defaultMessage="This method is insecure. We recommend using a {nostrlink}"
values={{
nostrlink: (
<a href="">
<FormattedMessage defaultMessage="nostr signer extension" />
</a>
),
}}
/>
</p>
<div className="paper">
<input
type="text"
value={key}
onChange={e => setNewKey(e.target.value)}
placeholder={formatMessage({ defaultMessage: "eg. nsec1xyz" })}
/>
</div>
<div className="flex f-space">
<div></div>
<div className="flex g8">
<button
type="button"
className="btn btn-secondary"
onClick={() => {
setNewKey("");
setStage(Stage.Login);
}}>
<FormattedMessage defaultMessage="Cancel" />
</button>
<AsyncButton onClick={doLoginNsec} className="btn btn-primary">
<FormattedMessage defaultMessage="Log In" />
</AsyncButton>
</div>
</div>
{error && <b className="error">{error}</b>}
</div>
</>
);
}
case Stage.Details: {
return (
<>
<h2>
<FormattedMessage defaultMessage="Setup Profile" />
</h2>
<div className="flex f-center">
<div
className="avatar-input"
onClick={uploadAvatar}
style={
{
"--img": `url(${avatar})`,
} as CSSProperties
}>
<Icon name="camera-plus" />
<img src={LoginProfile as string} srcSet={`${LoginProfile2x} 2x`} className="header-image" />
<div className="content-inner">
<h2>
<FormattedMessage defaultMessage="Setup Profile" />
</h2>
<div className="flex f-center">
<div
className="avatar-input"
onClick={uploadAvatar}
style={
{
"--img": `url(${avatar})`,
} as CSSProperties
}>
<Icon name="camera-plus" />
</div>
</div>
</div>
<div>
<div className="paper">
<input type="text" placeholder="Username" value={username} onChange={e => setUsername(e.target.value)} />
<div className="username">
<div className="paper">
<input
type="text"
placeholder="Username"
value={username}
onChange={e => setUsername(e.target.value)}
/>
</div>
<small>
<FormattedMessage defaultMessage="You can change this later" />
</small>
</div>
<small>
<FormattedMessage defaultMessage="You can change this later" />
</small>
<AsyncButton type="button" className="btn btn-primary" onClick={setupProfile}>
<FormattedMessage defaultMessage="Save" />
</AsyncButton>
</div>
</>
);
}
case Stage.LnAddress: {
return (
<>
<img src={LoginWallet as string} srcSet={`${LoginWallet2x} 2x`} className="header-image" />
<div className="content-inner">
<h2>
<FormattedMessage defaultMessage="Get paid by viewers" />
</h2>
<p>
<FormattedMessage defaultMessage="We hooked you up with a lightning wallet so you can get paid by viewers right away!" />
</p>
{providerInfo?.balance && (
<p>
<FormattedMessage
defaultMessage="Oh, and you have {n} sats of free streaming on us! 💜"
values={{
n: <FormattedNumber value={providerInfo.balance} />,
}}
/>
</p>
)}
<div className="username">
<div className="paper">
<input
type="text"
placeholder={formatMessage({ defaultMessage: "eg. name@wallet.com" })}
value={lnAddress}
onChange={e => setLnAddress(e.target.value)}
/>
</div>
<small>
<FormattedMessage defaultMessage="You can always replace it with your own address later." />
</small>
</div>
{error && <b className="error">{error}</b>}
<AsyncButton type="button" className="btn btn-primary" onClick={saveProfile}>
<FormattedMessage defaultMessage="Amazing! Continue.." />
</AsyncButton>
</div>
<AsyncButton type="button" className="btn btn-primary" onClick={saveProfile}>
<FormattedMessage defaultMessage="Save" />
</AsyncButton>
</>
);
}
case Stage.SaveKey: {
return (
<>
<h2>
<FormattedMessage defaultMessage="Save Key" />
</h2>
<p>
<FormattedMessage defaultMessage="Nostr uses private keys, please save yours, if you lose this key you wont be able to login to your account anymore!" />
</p>
<div className="paper">
<Copy text={hexToBech32("nsec", key)} />
<img src={LoginKey as string} srcSet={`${LoginKey2x} 2x`} className="header-image" />
<div className="content-inner">
<h2>
<FormattedMessage defaultMessage="Save Key" />
</h2>
<p>
<FormattedMessage defaultMessage="Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!" />
</p>
<div className="paper">
<Copy text={hexToBech32("nsec", key)} />
</div>
<button type="button" className="btn btn-primary" onClick={loginWithKey}>
<FormattedMessage defaultMessage="Ok, it's safe" />
</button>
</div>
<button type="button" className="btn btn-primary" onClick={loginWithKey}>
<FormattedMessage defaultMessage="Ok, it's safe" />
</button>
</>
);
}

View File

@ -2,19 +2,15 @@ import "./new-goal.css";
import * as Dialog from "@radix-ui/react-dialog";
import AsyncButton from "./async-button";
import { NostrLink } from "@snort/system";
import { Icon } from "element/icon";
import { useState } from "react";
import { System } from "index";
import { GOAL } from "const";
import { useLogin } from "hooks/login";
import { FormattedMessage } from "react-intl";
import { defaultRelays } from "const";
interface NewGoalDialogProps {
link: NostrLink;
}
export function NewGoalDialog({ link }: NewGoalDialogProps) {
export function NewGoalDialog() {
const [open, setOpen] = useState(false);
const login = useLogin();
@ -26,12 +22,9 @@ export function NewGoalDialog({ link }: NewGoalDialogProps) {
if (pub) {
const evNew = await pub.generic(eb => {
eb.kind(GOAL)
.tag(["a", `${link.kind}:${link.author}:${link.id}`])
.tag(["amount", String(Number(goalAmount) * 1000)])
.tag(["relays", ...Object.keys(defaultRelays)])
.content(goalName);
if (link.relays?.length) {
eb.tag(["relays", ...link.relays]);
}
return eb;
});
console.debug(evNew);
@ -58,7 +51,7 @@ export function NewGoalDialog({ link }: NewGoalDialogProps) {
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
<div className="new-goal">
<div className="new-goal content-inner">
<div className="zap-goals">
<Icon name="zap-filled" className="stream-zap-goals-icon" size={16} />
<h3>

View File

@ -39,8 +39,9 @@ function NewStream({ ev, onFinish }: StreamEditorProps) {
location.href = `${__XXX_HOST}/${eventLink(ex)}`;
} else {
navigate(`/${eventLink(ex)}`, {
state: ev,
state: ex,
});
onFinish?.(ex);
}
} else {
onFinish?.(ev);
@ -101,8 +102,10 @@ export function NewStreamDialog(props: NewStreamDialogProps & StreamEditorProps)
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
<div className="new-stream">
<NewStream {...props} onFinish={() => setOpen(false)} />
<div className="content-inner">
<div className="new-stream">
<NewStream {...props} onFinish={() => setOpen(false)} />
</div>
</div>
</Dialog.Content>
</Dialog.Portal>

View File

@ -190,6 +190,7 @@ export function NostrProviderDialog({ provider, ...others }: { provider: StreamP
["title", info.streamInfo?.title ?? ""],
["summary", info.streamInfo?.summary ?? ""],
["image", info.streamInfo?.image ?? ""],
...(info.streamInfo?.goal ? [["goal", info.streamInfo.goal]] : []),
...(info.streamInfo?.content_warning ? [["content-warning", info.streamInfo?.content_warning]] : []),
...(info.streamInfo?.tags?.map(a => ["t", a]) ?? []),
],

View File

@ -6,7 +6,7 @@
.send-zap .amounts {
display: grid;
grid-template-columns: repeat(6, 1fr);
grid-template-columns: repeat(5, 1fr);
justify-content: space-evenly;
gap: 8px;
}

View File

@ -13,7 +13,8 @@ import QrCode from "./qr-code";
import { useLogin } from "hooks/login";
import Copy from "./copy";
import { defaultRelays } from "const";
import { FormattedMessage } from "react-intl";
import { FormattedMessage, FormattedNumber } from "react-intl";
import { useRates } from "hooks/rates";
export interface LNURLLike {
get name(): string;
@ -33,11 +34,8 @@ export interface SendZapsProps {
}
export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: SendZapsProps) {
const UsdRate = 28_000;
const satsAmounts = [
21, 69, 121, 221, 420, 1_000, 2_100, 5_000, 6_666, 10_000, 21_000, 42_000, 69_000, 100_000, 210_000, 500_000,
1_000_000,
21, 69, 121, 420, 1_000, 2_100, 4_200, 10_000, 21_000, 42_000, 69_000, 100_000, 210_000, 500_000, 1_000_000,
];
const usdAmounts = [0.05, 0.5, 2, 5, 10, 50, 100, 200];
const [isFiat, setIsFiat] = useState(false);
@ -46,6 +44,7 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se
const [comment, setComment] = useState("");
const [invoice, setInvoice] = useState("");
const login = useLogin();
const rate = useRates("BTCUSD");
const relays = Object.keys(defaultRelays);
const name = targetName ?? svc?.name;
async function loadService(lnurl: string) {
@ -53,6 +52,7 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se
await s.load();
setSvc(s);
}
const usdRate = rate.time ? rate.ask : 26_000;
useEffect(() => {
if (!svc) {
@ -73,7 +73,7 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se
isAnon = true;
}
const amountInSats = isFiat ? Math.floor((amount / UsdRate) * 1e8) : amount;
const amountInSats = isFiat ? Math.floor((amount / usdRate) * 1e8) : amount;
let zap: NostrEvent | undefined;
if (pubkey) {
zap = await pub.zap(amountInSats * 1000, pubkey, relays, undefined, comment, eb => {
@ -131,8 +131,20 @@ export function SendZaps({ lnurl, pubkey, aTag, eTag, targetName, onFinish }: Se
<small>
<FormattedMessage
defaultMessage="Zap amount in {currency}"
values={{ amount: isFiat ? "USD" : "sats" }}
values={{ currency: isFiat ? "USD" : "SATS" }}
/>
{isFiat && (
<>
&nbsp;
<FormattedMessage
defaultMessage="@ {rate}"
description="Showing zap amount in USD @ rate"
values={{
rate: <FormattedNumber value={usdRate} />,
}}
/>
</>
)}
</small>
<div className="amounts">
{(isFiat ? usdAmounts : satsAmounts).map(a => (
@ -209,7 +221,9 @@ export function SendZapsDialog(props: Omit<SendZapsProps, "onFinish">) {
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
<SendZaps {...props} onFinish={() => setIsOpen(false)} />
<div className="content-inner">
<SendZaps {...props} onFinish={() => setIsOpen(false)} />
</div>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>

View File

@ -56,23 +56,25 @@ export function ShareMenu({ ev }: { ev: NostrEvent }) {
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
<h2>
<FormattedMessage defaultMessage="Share" />
</h2>
<div className="paper">
<Textarea
emojis={[]}
value={message}
onChange={e => setMessage(e.target.value)}
onKeyDown={() => {
//noop
}}
rows={15}
/>
<div className="content-inner">
<h2>
<FormattedMessage defaultMessage="Share" />
</h2>
<div className="paper">
<Textarea
emojis={[]}
value={message}
onChange={e => setMessage(e.target.value)}
onKeyDown={() => {
//noop
}}
rows={15}
/>
</div>
<AsyncButton className="btn btn-primary" onClick={sendMessage}>
<FormattedMessage defaultMessage="Send" />
</AsyncButton>
</div>
<AsyncButton className="btn btn-primary" onClick={sendMessage}>
<FormattedMessage defaultMessage="Send" />
</AsyncButton>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>

View File

@ -180,12 +180,11 @@ function CardDialog({ header, cta, cancelCta, card, onSave, onCancel }: CardDial
const [image, setImage] = useState(card?.image ?? "");
const [content, setContent] = useState(card?.content ?? "");
const [link, setLink] = useState(card?.link ?? "");
const { formatMessage } = useIntl();
return (
<div className="new-card">
<h3>
{header || <FormattedMessage defaultMessage="Add card" />}
</h3>
<h3>{header || <FormattedMessage defaultMessage="Add card" />}</h3>
<div className="form-control">
<label htmlFor="card-title">
<FormattedMessage defaultMessage="Title" />
@ -195,7 +194,7 @@ function CardDialog({ header, cta, cancelCta, card, onSave, onCancel }: CardDial
type="text"
value={title}
onChange={e => setTitle(e.target.value)}
placeholder="e.g. about me"
placeholder={formatMessage({ defaultMessage: "e.g. about me" })}
/>
</div>
<div className="form-control">
@ -220,7 +219,11 @@ function CardDialog({ header, cta, cancelCta, card, onSave, onCancel }: CardDial
<label htmlFor="card-content">
<FormattedMessage defaultMessage="Content" />
</label>
<textarea placeholder="Start typing..." value={content} onChange={e => setContent(e.target.value)} />
<textarea
placeholder={formatMessage({ defaultMessage: "Start typing" })}
value={content}
onChange={e => setContent(e.target.value)}
/>
<span className="help-text">
<FormattedMessage
defaultMessage="Supports {markdown}"
@ -309,14 +312,16 @@ function EditCard({ card, cards }: EditCardProps) {
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
<CardDialog
header={formatMessage({ defaultMessage: "Edit card" })}
cta={formatMessage({ defaultMessage: "Save card" })}
cancelCta={formatMessage({ defaultMessage: "Delete" })}
card={card}
onSave={editCard}
onCancel={onCancel}
/>
<div className="content-inner">
<CardDialog
header={formatMessage({ defaultMessage: "Edit card" })}
cta={formatMessage({ defaultMessage: "Save card" })}
cancelCta={formatMessage({ defaultMessage: "Delete" })}
card={card}
onSave={editCard}
onCancel={onCancel}
/>
</div>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
@ -380,7 +385,9 @@ function AddCard({ cards }: AddCardProps) {
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
<CardDialog onSave={createCard} onCancel={onCancel} />
<div className="content-inner">
<CardDialog onSave={createCard} onCancel={onCancel} />
</div>
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>

View File

@ -3,12 +3,14 @@ import { useEffect, useState, useCallback } from "react";
import { NostrEvent } from "@snort/system";
import { unixNow } from "@snort/shared";
import { TagsInput } from "react-tag-input-component";
import { FormattedMessage, useIntl } from "react-intl";
import AsyncButton from "./async-button";
import { StreamState } from "../index";
import { findTag } from "../utils";
import { useLogin } from "hooks/login";
import { FormattedMessage, useIntl } from "react-intl";
import { NewGoalDialog } from "element/new-goal";
import { useGoals } from "hooks/goals";
export interface StreamEditorProps {
ev?: NostrEvent;
@ -24,6 +26,27 @@ export interface StreamEditorProps {
};
}
interface GoalSelectorProps {
goal?: string;
pubkey: string;
onGoalSelect: (g: string) => void;
}
function GoalSelector({ goal, pubkey, onGoalSelect }: GoalSelectorProps) {
const goals = useGoals(pubkey, true);
const { formatMessage } = useIntl();
return (
<select onChange={ev => onGoalSelect(ev.target.value)}>
<option value="">{formatMessage({ defaultMessage: "Select a goal..." })}</option>
{goals?.map(x => (
<option key={x.id} value={x.id} selected={goal === x.id}>
{x.content}
</option>
))}
</select>
);
}
export function StreamEditor({ ev, onFinish, options }: StreamEditorProps) {
const [title, setTitle] = useState("");
const [summary, setSummary] = useState("");
@ -34,6 +57,7 @@ export function StreamEditor({ ev, onFinish, options }: StreamEditorProps) {
const [tags, setTags] = useState<string[]>([]);
const [contentWarning, setContentWarning] = useState(false);
const [isValid, setIsValid] = useState(false);
const [goal, setGoal] = useState<string>();
const login = useLogin();
const { formatMessage } = useIntl();
@ -46,6 +70,7 @@ export function StreamEditor({ ev, onFinish, options }: StreamEditorProps) {
setStart(findTag(ev, "starts"));
setTags(ev?.tags.filter(a => a[0] === "t").map(a => a[1]) ?? []);
setContentWarning(findTag(ev, "content-warning") !== undefined);
setGoal(findTag(ev, "goal"));
}, [ev?.id]);
const validate = useCallback(() => {
@ -90,6 +115,9 @@ export function StreamEditor({ ev, onFinish, options }: StreamEditorProps) {
if (contentWarning) {
eb.tag(["content-warning", "nsfw"]);
}
if (goal && goal.length > 0) {
eb.tag(["goal", goal]);
}
return eb;
});
console.debug(evNew);
@ -201,6 +229,19 @@ export function StreamEditor({ ev, onFinish, options }: StreamEditorProps) {
</div>
</div>
)}
{login?.pubkey && (
<>
<div>
<p>
<FormattedMessage defaultMessage="Goal" />
</p>
<div className="paper">
<GoalSelector goal={goal} pubkey={login?.pubkey} onGoalSelect={setGoal} />
</div>
</div>
<NewGoalDialog />
</>
)}
{(options?.canSetContentWarning ?? true) && (
<div className="flex g12 content-warning">
<div>

View File

@ -9,9 +9,15 @@ export function StreamTimer({ ev }: { ev?: NostrEvent }) {
function updateTime() {
const starts = Number(findTag(ev, "starts") ?? unixNow());
const diff = unixNow() - starts;
const hours = Number(diff / 60.0 / 60.0);
const mins = Number((diff / 60) % 60);
setTime(`${hours.toFixed(0).padStart(2, "0")}:${mins.toFixed(0).padStart(2, "0")}`);
const min = 60;
const hour = min * 60;
const hours = Math.floor(diff / hour);
const mins = Math.floor((diff % hour) / min);
const secs = Math.floor(diff % min);
setTime(
`${hours.toFixed(0).padStart(2, "0")}:${mins.toFixed(0).padStart(2, "0")}:${secs.toFixed(0).padStart(2, "0")}`
);
}
useEffect(() => {

View File

@ -0,0 +1,27 @@
import { ParsedZap } from "@snort/system";
import useTopZappers from "hooks/top-zappers";
import { formatSats } from "number";
import { Icon } from "./icon";
import { Profile } from "./profile";
export function TopZappers({ zaps, limit }: { zaps: ParsedZap[]; limit?: number }) {
const zappers = useTopZappers(zaps);
return (
<>
{zappers.slice(0, limit ?? 10).map(({ pubkey, total }) => {
return (
<div className="top-zapper" key={pubkey}>
{pubkey === "anon" ? (
<p className="top-zapper-name">Anon</p>
) : (
<Profile pubkey={pubkey} options={{ showName: false }} />
)}
<Icon name="zap-filled" className="zap-icon" />
<p className="top-zapper-amount">{formatSats(total)}</p>
</div>
);
})}
</>
);
}

View File

@ -1,44 +1,31 @@
import { useMemo } from "react";
import {
EventKind,
NostrEvent,
RequestBuilder,
NoteCollection,
ReplaceableNoteStore,
NostrLink,
parseZap,
} from "@snort/system";
import { RequestBuilder, FlatNoteStore, ReplaceableNoteStore } from "@snort/system";
import { useRequestBuilder } from "@snort/system-react";
import { unwrap } from "@snort/shared";
import { GOAL } from "const";
import { System } from "index";
export function useZaps(goal: NostrEvent, leaveOpen = false) {
export function useZapGoal(id?: string) {
const sub = useMemo(() => {
const b = new RequestBuilder(`goal-zaps:${goal.id.slice(0, 12)}`);
b.withOptions({ leaveOpen });
b.withFilter().kinds([EventKind.ZapReceipt]).tag("e", [goal.id]).since(goal.created_at);
if (!id) return null;
const b = new RequestBuilder(`goal:${id.slice(0, 12)}`);
b.withFilter().kinds([GOAL]).ids([id]);
return b;
}, [goal, leaveOpen]);
const { data } = useRequestBuilder(NoteCollection, sub);
return data?.map(ev => parseZap(ev, System.ProfileLoader.Cache)).filter(z => z && z.valid) ?? [];
}
export function useZapGoal(host: string, link?: NostrLink, leaveOpen = false) {
const sub = useMemo(() => {
if (!link) return null;
const b = new RequestBuilder(`goals:${host.slice(0, 12)}`);
b.withOptions({ leaveOpen });
b.withFilter()
.kinds([GOAL])
.authors([host])
.tag("a", [`${link.kind}:${unwrap(link.author)}:${link.id}`]);
return b;
}, [link, leaveOpen]);
}, [id]);
const { data } = useRequestBuilder(ReplaceableNoteStore, sub);
return data;
}
export function useGoals(pubkey?: string, leaveOpen = false) {
const sub = useMemo(() => {
if (!pubkey) return null;
const b = new RequestBuilder(`goals:${pubkey.slice(0, 12)}`);
b.withOptions({ leaveOpen });
b.withFilter().kinds([GOAL]).authors([pubkey]);
return b;
}, [pubkey, leaveOpen]);
const { data } = useRequestBuilder(FlatNoteStore, sub);
return data;
}

33
src/hooks/lang.ts Normal file
View File

@ -0,0 +1,33 @@
import { ExternalStore } from "@snort/shared";
import { useSyncExternalStore } from "react";
export const DefaultLocale = "en-US";
class LangStore extends ExternalStore<string> {
setLang(lang: string) {
localStorage.setItem("lang", lang);
this.notifyChange();
}
takeSnapshot(): string {
return localStorage.getItem("lang") ?? getLocale();
}
}
const LangSelector = new LangStore();
export function useLang() {
const store = useSyncExternalStore(
c => LangSelector.hook(c),
() => LangSelector.snapshot()
);
return {
lang: store,
setLang: (l: string) => LangSelector.setLang(l),
};
}
export const getLocale = () => {
return (navigator.languages && navigator.languages[0]) ?? navigator.language ?? DefaultLocale;
};

View File

@ -1,10 +1,12 @@
import { NostrLink, RequestBuilder, EventKind, NoteCollection } from "@snort/system";
import { useRequestBuilder } from "@snort/system-react";
import { unixNow } from "@snort/shared";
import { useMemo } from "react";
import { SnortContext, useRequestBuilder } from "@snort/system-react";
import { unixNow, unwrap } from "@snort/shared";
import { useContext, useEffect, useMemo } from "react";
import { LIVE_STREAM_CHAT, WEEK } from "const";
import { findTag } from "utils";
export function useLiveChatFeed(link: NostrLink, eZaps?: Array<string>) {
const system = useContext(SnortContext);
const since = useMemo(() => unixNow() - WEEK, [link.id]);
const sub = useMemo(() => {
const rb = new RequestBuilder(`live:${link.id}:${link.author}`);
@ -44,6 +46,12 @@ export function useLiveChatFeed(link: NostrLink, eZaps?: Array<string>) {
return rb;
}, [etags]);
useEffect(() => {
const pubkeys = [...new Set(zaps.flatMap(a => [a.pubkey, unwrap(findTag(a, "p"))]))];
system.ProfileLoader.TrackMetadata(pubkeys);
return () => system.ProfileLoader.UntrackMetadata(pubkeys);
}, [zaps]);
const reactionsSub = useRequestBuilder(NoteCollection, esub);
const reactions = reactionsSub.data ?? [];

33
src/hooks/rates.ts Normal file
View File

@ -0,0 +1,33 @@
import { bech32ToHex } from "@snort/shared";
import { EventKind, ReplaceableNoteStore, RequestBuilder } from "@snort/system";
import { useRequestBuilder } from "@snort/system-react";
import { useMemo } from "react";
// Snort backend publishes rates
const SnortPubkey = "npub1sn0rtcjcf543gj4wsg7fa59s700d5ztys5ctj0g69g2x6802npjqhjjtws";
export function useRates(symbol: string, leaveOpen = true) {
const sub = useMemo(() => {
const rb = new RequestBuilder(`rates:${symbol}`);
rb.withOptions({
leaveOpen,
});
rb.withFilter()
.kinds([1009 as EventKind])
.authors([bech32ToHex(SnortPubkey)])
.tag("d", [symbol])
.limit(1);
return rb;
}, [symbol]);
const data = useRequestBuilder(ReplaceableNoteStore, sub);
const tag = data?.data?.tags.find(a => a[0] === "d" && a[1] === symbol);
return {
time: data.data?.created_at,
ask: Number(tag?.[2]),
bid: Number(tag?.[3]),
low: Number(tag?.[4]),
hight: Number(tag?.[5]),
};
}

22
src/hooks/status.ts Normal file
View File

@ -0,0 +1,22 @@
import { useMemo } from "react";
import { EventKind, ReplaceableNoteStore, RequestBuilder } from "@snort/system";
import { useRequestBuilder } from "@snort/system-react";
type StatusTag = "general" | "music";
export function useStatus(tag: StatusTag, author?: string, leaveOpen = true) {
const sub = useMemo(() => {
if (!author) return null;
const b = new RequestBuilder(`status:${tag}:${author.slice(0, 8)}`);
b.withOptions({ leaveOpen });
b.withFilter()
.kinds([30315 as EventKind])
.tag("d", [tag])
.authors([author]);
return b;
}, [author]);
const { data } = useRequestBuilder(ReplaceableNoteStore, sub);
return data;
}

30
src/hooks/stream-link.ts Normal file
View File

@ -0,0 +1,30 @@
import { fetchNip05Pubkey, hexToBech32 } from "@snort/shared";
import { NostrLink, tryParseNostrLink, NostrPrefix } from "@snort/system";
import { useState, useEffect } from "react";
import { useParams } from "react-router-dom";
export function useStreamLink() {
const params = useParams();
const [link, setLink] = useState<NostrLink>();
useEffect(() => {
if (params.id) {
const parsedLink = tryParseNostrLink(params.id);
if (parsedLink) {
setLink(parsedLink);
} else {
const [handle, domain] = (params.id.includes("@") ? params.id : `${params.id}@zap.stream`).split("@");
fetchNip05Pubkey(handle, domain).then(d => {
if (d) {
setLink({
id: d,
type: NostrPrefix.PublicKey,
encode: () => hexToBech32(NostrPrefix.PublicKey, d),
} as NostrLink);
}
});
}
}
}, [params.id]);
return link;
}

40
src/hooks/zaps.ts Normal file
View File

@ -0,0 +1,40 @@
import { unwrap } from "@snort/shared";
import { NostrLink, RequestBuilder, NostrPrefix, EventKind, NoteCollection, parseZap } from "@snort/system";
import { SnortContext, useRequestBuilder } from "@snort/system-react";
import { System } from "index";
import { useContext, useMemo, useEffect } from "react";
import { findTag } from "utils";
export function useZaps(link?: NostrLink, leaveOpen = false) {
const system = useContext(SnortContext);
const sub = useMemo(() => {
if (link) {
const b = new RequestBuilder(`zaps:${link.id}`);
b.withOptions({ leaveOpen });
if (link.type === NostrPrefix.Event || link.type === NostrPrefix.Note) {
b.withFilter().kinds([EventKind.ZapReceipt]).tag("e", [link.id]);
} else if (link.type === NostrPrefix.Address) {
b.withFilter()
.kinds([EventKind.ZapReceipt])
.tag("a", [`${link.kind}:${link.author}:${link.id}`]);
}
return b;
}
return null;
}, [link, leaveOpen]);
const { data: zaps } = useRequestBuilder(NoteCollection, sub);
useEffect(() => {
const pubkeys = zaps ? [...new Set(zaps.flatMap(a => [a.pubkey, unwrap(findTag(a, "p"))]))] : [];
system.ProfileLoader.TrackMetadata(pubkeys);
return () => system.ProfileLoader.UntrackMetadata(pubkeys);
}, [zaps]);
return (
[...(zaps ?? [])]
.sort((a, b) => (b.created_at > a.created_at ? 1 : -1))
.map(ev => parseZap(ev, System.ProfileLoader.Cache))
.filter(z => z && z.valid) ?? []
);
}

View File

@ -17,6 +17,7 @@ body {
--text-danger: #ff563f;
--surface: #222;
--border: #171717;
--border-2: #393939;
--gradient-purple: linear-gradient(135deg, #882bff 0%, #f83838 100%);
--gradient-yellow: linear-gradient(270deg, #adff27 0%, #ffd027 100%);
--gradient-orange: linear-gradient(270deg, #ff5b27 0%, rgba(255, 182, 39, 0.99) 100%);
@ -60,6 +61,16 @@ a {
justify-content: center;
}
.f-space {
justify-content: space-between;
}
@media (max-width: 1020px) {
.f-col-mobile {
flex-direction: column;
}
}
.pill {
background: #171717;
padding: 4px 8px;
@ -76,12 +87,17 @@ a {
color: white;
}
.g8 {
gap: 8px;
}
.g12 {
gap: 12px;
}
.g24 {
gap: 24px;
}
.g12 {
gap: 12px;
.g48 {
gap: 48px;
}
.w-max {
@ -90,6 +106,14 @@ a {
width: -moz-available;
}
.uppercase {
text-transform: uppercase;
}
.pointer {
cursor: pointer;
}
.btn {
border: none;
outline: none;
@ -105,6 +129,10 @@ a {
gap: 8px;
}
.btn-block {
width: 100%;
}
.btn-small {
font-size: 14px;
line-height: 18px;
@ -162,6 +190,16 @@ input[type="number"] {
font-weight: 500;
}
select {
font-family: inherit;
border: unset;
background-color: #262626;
color: inherit;
width: 100%;
font-size: 16px;
font-weight: 500;
}
input[type="checkbox"] {
-webkit-appearance: none;
-moz-appearance: none;
@ -233,19 +271,43 @@ div.paper {
width: 90vw;
max-width: 450px;
max-height: 85vh;
padding: 25px;
overflow-y: auto;
}
.dialog-content .header-image {
width: 100%;
height: auto;
}
.dialog-content .content-inner {
width: 100%;
display: flex;
flex-direction: column;
padding: 25px;
box-sizing: border-box;
gap: 16px;
}
.dialog-content .username,
.dialog-content .username input {
width: 100%;
}
.dialog-content div.paper {
background: #262626;
width: 100%;
box-sizing: border-box;
}
.dialog-content h3 {
.dialog-content h2 {
font-size: 24px;
font-weight: 500;
margin: 0;
}
.dialog-content h3 {
font-size: 16px;
font-weight: 500;
margin: 0;
margin-bottom: 24px;
}
.dialog-content small {
display: block;
@ -300,3 +362,15 @@ div.paper {
.secondary {
color: #909090;
}
.or-divider {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
gap: 16px;
}
.or-divider hr {
width: 135px;
border-color: var(--border-2);
}

View File

@ -18,8 +18,11 @@ import { LoginStore } from "login";
import { StreamProvidersPage } from "pages/providers";
import { defaultRelays } from "const";
import { CatchAllRoutePage } from "pages/catch-all";
import { SettingsPage } from "pages/settings-page";
import { register } from "serviceWorker";
import { IntlProvider } from "intl";
import { WidgetsPage } from "pages/widgets";
import { AlertsPage } from "pages/alerts";
export enum StreamState {
Live = "live",
@ -65,6 +68,14 @@ const router = createBrowserRouter([
path: "/providers/:id?",
element: <StreamProvidersPage />,
},
{
path: "/settings",
element: <SettingsPage />,
},
{
path: "/widgets",
element: <WidgetsPage />,
},
{
path: "*",
element: <CatchAllRoutePage />,
@ -74,6 +85,18 @@ const router = createBrowserRouter([
{
path: "/chat/:id",
element: <ChatPopout />,
loader: async () => {
await System.Init();
return null;
},
},
{
path: "/alert/:id/:type",
element: <AlertsPage />,
loader: async () => {
await System.Init();
return null;
},
},
]);
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLDivElement);

View File

@ -1,31 +1,102 @@
import { DefaultLocale, useLang } from "hooks/lang";
import { useEffect, useState, type ReactNode } from "react";
import { IntlProvider as ReactIntlProvider } from "react-intl";
import enMessages from "translations/en.json";
const DefaultLocale = "en-US";
async function importLang(code: string) {
const src = await import(`translations/${code}.json`);
const typed = src.default as Record<string, { defaultMessage: string }>;
const ent = Object.entries(typed).map(([k, v]) => [k, v.defaultMessage]);
return Object.fromEntries(ent) as Record<string, string>;
}
export const AllLocales = [
DefaultLocale,
"de-DE",
"es-ES",
"th-TH",
"nl-NL",
"ja-JP",
"fa-IR",
"sw-KE",
"sv-SE",
"bn-BD",
"bg-BG",
"zh-CN",
"zh-TW",
"fi-FI",
"fr-FR",
"pt-BR",
"ru-RU",
];
const getMessages = (locale: string) => {
const truncatedLocale = locale.toLowerCase().split(/[_-]+/)[0];
const matchLang = (lng: string) => {
const matchLang = async (lng: string) => {
switch (lng) {
case "de":
case "de-DE":
return await importLang("de_DE");
case "es":
case "es-ES":
return await importLang("es_ES");
case "th":
case "th-TH":
return await importLang("th_TH");
case "nl":
case "nl-NL":
return await importLang("nl_NL");
case "ja":
case "ja-JP":
return await importLang("ja_JP");
case "fa":
case "fa-IR":
return await importLang("fa_IR");
case "sw":
case "sw-KE":
return await importLang("sw_KE");
case "sv":
case "sv-SE":
return await importLang("sv_SE");
case "bn":
case "bn-BD":
return await importLang("bn_BD");
case "bg":
case "bg-BG":
return await importLang("bg_BG");
case "zh":
case "zh-CN":
return await importLang("zh_CN");
case "zh-TW":
return await importLang("zh_TW");
case "fi":
case "fi-FI":
return await importLang("fi_FI");
case "fr":
case "fr-FR":
return await importLang("fr_FR");
case "pt-BR":
return await importLang("pt_BR");
case "ru":
case "ru-RU":
return await importLang("ru_RU");
case DefaultLocale:
case "en":
return enMessages;
}
};
return matchLang(locale) ?? matchLang(truncatedLocale) ?? enMessages;
return matchLang(locale) ?? matchLang(truncatedLocale) ?? Promise.resolve(enMessages);
};
export const IntlProvider = ({ children }: { children: ReactNode }) => {
const locale = getLocale();
const { lang: locale } = useLang();
const [messages, setMessages] = useState<Record<string, string>>(enMessages);
useEffect(() => {
const msg = getMessages(locale);
setMessages(msg);
getMessages(locale).then(a => setMessages(a as Record<string, string>));
}, [locale]);
return (
@ -34,7 +105,3 @@ export const IntlProvider = ({ children }: { children: ReactNode }) => {
</ReactIntlProvider>
);
};
export const getLocale = () => {
return (navigator.languages && navigator.languages[0]) ?? navigator.language ?? DefaultLocale;
};

View File

@ -2,12 +2,18 @@
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
@ -17,9 +23,15 @@
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
@ -32,9 +44,15 @@
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
@ -53,6 +71,12 @@
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
@ -68,36 +92,69 @@
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
@ -113,9 +170,6 @@
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"Ld5LAE": {
"defaultMessage": "Nostr uses private keys, please save yours, if you lose this key you wont be able to login to your account anymore!"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
@ -125,12 +179,18 @@
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
@ -143,6 +203,9 @@
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
@ -152,9 +215,15 @@
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
@ -170,30 +239,58 @@
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
@ -209,12 +306,21 @@
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
@ -236,6 +342,9 @@
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
@ -245,30 +354,51 @@
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
@ -277,5 +407,14 @@
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

BIN
src/login-invite.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
src/login-invite@2x.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/login-key.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
src/login-key@2x.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
src/login-profile.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

BIN
src/login-profile@2x.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
src/login-start.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
src/login-start@2x.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/login-vault.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/login-vault@2x.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
src/login-wallet.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
src/login-wallet@2x.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

134
src/pages/alerts.css Normal file
View File

@ -0,0 +1,134 @@
.zap-alerts-widget .zap-alert {
animation: fadeInOut 10s;
}
@keyframes fadeInOut {
0% {
opacity: 0;
}
16% {
opacity: 1;
}
84% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.text-to-speech-settings {
display: flex;
flex-direction: column;
gap: 4px;
}
.text-to-speech-settings .labeled-input {
display: flex;
flex-direction: column;
align-items: flex-start;
}
.text-to-speech-settings .labeled-input label {
font-size: 14px;
color: var(--text-muted);
}
.text-to-speech-settings textarea {
resize: vertical;
}
.zap-alert {
display: inline-flex;
flex-direction: column;
align-items: center;
border-radius: 17px;
background: #2d2d2d;
margin-top: 24px;
}
.zap-alert > .zap-alert-title {
width: fit-content;
text-align: center;
left: 120px;
margin-top: -20px;
font-size: 21px;
font-weight: 600;
border-radius: 33px;
background: linear-gradient(135deg, #882bff 0%, #f83838 100%);
padding: 8px 24px;
z-index: 2;
}
.zap-alert > .zap-alert-header {
z-index: 1;
display: inline-flex;
justify-content: center;
align-items: center;
padding: 12px 90px 24px 90px;
font-size: 29px;
font-weight: 600;
}
.zap-alert-body {
padding: 0 24px 24px 24px;
margin-top: -20px;
margin-bottom: 0;
}
.zap-alert .highlight {
color: #ff4468;
}
.views {
display: inline-block;
border-radius: 16px;
background: #222;
padding: 16px 24px;
font-size: 21px;
font-weight: 600;
line-height: 32px;
}
.top-zappers-widget {
display: inline-flex;
border-radius: 16px;
background: #222;
padding: 16px 24px;
font-size: 21px;
font-weight: 600;
align-items: center;
gap: 16px;
}
.top-zappers-widget .top-zapper {
background-color: #3f3f3f;
border: unset;
}
.top-zappers-widget .profile > img {
width: 24px;
height: 24px;
}
.music {
display: flex;
flex-direction: column;
align-items: center;
padding: 16px;
gap: 4px;
border-radius: 16px;
background: #222;
max-width: 340px;
}
.music .cover {
object-fit: cover;
width: 120px;
height: 120px;
}
.music .track {
margin: 0;
font-size: 14px;
}

33
src/pages/alerts.tsx Normal file
View File

@ -0,0 +1,33 @@
import "./alerts.css";
import Spinner from "element/spinner";
import { useStreamLink } from "hooks/stream-link";
import { useParams } from "react-router-dom";
import { ZapAlerts } from "./widgets/zaps";
import { Views } from "./widgets/views";
import { TopZappersWidget } from "./widgets/top-zappers";
import { Music } from "./widgets/music";
export function AlertsPage() {
const params = useParams();
const link = useStreamLink();
if (!link) {
return <Spinner />;
}
switch (params.type) {
case "zaps": {
return <ZapAlerts link={link} />;
}
case "views": {
return <Views link={link} />;
}
case "top-zappers": {
return <TopZappersWidget link={link} />;
}
case "music": {
return <Music link={link} />;
}
}
return null;
}

View File

@ -167,3 +167,69 @@ button span.hide-on-mobile {
.profile-menu {
cursor: pointer;
}
.fi {
background-position: 50%;
background-repeat: no-repeat;
width: 30px;
height: 30px;
aspect-ratio: 1;
border-radius: 100%;
background-size: cover;
}
.fi:before {
content: "\00a0";
}
/* [DefaultLocale, "de-DE", "es-ES", "th-TH", "nl-NL", "ja-JP", "fa-IR", "sw-KE", "sv-SE"]; */
.fi-us {
background-image: url("flag-icons/flags/1x1/us.svg");
}
.fi-de {
background-image: url("flag-icons/flags/1x1/de.svg");
}
.fi-es {
background-image: url("flag-icons/flags/1x1/es.svg");
}
.fi-th {
background-image: url("flag-icons/flags/1x1/th.svg");
}
.fi-nl {
background-image: url("flag-icons/flags/1x1/nl.svg");
}
.fi-jp {
background-image: url("flag-icons/flags/1x1/jp.svg");
}
.fi-ir {
background-image: url("flag-icons/flags/1x1/ir.svg");
}
.fi-ke {
background-image: url("flag-icons/flags/1x1/ke.svg");
}
.fi-se {
background-image: url("flag-icons/flags/1x1/se.svg");
}
.fi-bg {
background-image: url("flag-icons/flags/1x1/bg.svg");
}
.fi-bd {
background-image: url("flag-icons/flags/1x1/bd.svg");
}
.fi-cn {
background-image: url("flag-icons/flags/1x1/cn.svg");
}
.fi-tw {
background-image: url("flag-icons/flags/1x1/tw.svg");
}
.fi-fi {
background-image: url("flag-icons/flags/1x1/fi.svg");
}
.fi-fr {
background-image: url("flag-icons/flags/1x1/fr.svg");
}
.fi-br {
background-image: url("flag-icons/flags/1x1/br.svg");
}
.fi-ru {
background-image: url("flag-icons/flags/1x1/ru.svg");
}

View File

@ -1,25 +1,55 @@
import "./layout.css";
import { useState } from "react";
import * as Dialog from "@radix-ui/react-dialog";
import { Outlet, useNavigate } from "react-router-dom";
import { Helmet } from "react-helmet";
import { FormattedMessage } from "react-intl";
import { Menu, MenuItem } from "@szhsin/react-menu";
import { hexToBech32 } from "@snort/shared";
import { Icon } from "element/icon";
import { useLogin, useLoginEvents } from "hooks/login";
import { Profile } from "element/profile";
import { NewStreamDialog } from "element/new-stream";
import { LoginSignup } from "element/login-signup";
import { Menu, MenuItem } from "@szhsin/react-menu";
import { hexToBech32 } from "@snort/shared";
import { Login } from "index";
import { FormattedMessage } from "react-intl";
import { useLang } from "hooks/lang";
import { AllLocales } from "intl";
export function LayoutPage() {
const navigate = useNavigate();
const login = useLogin();
const [showLogin, setShowLogin] = useState(false);
const { lang, setLang } = useLang();
useLoginEvents(login?.pubkey, true);
function langSelector() {
return (
<Menu
menuClassName="ctx-menu"
menuButton={
<div className="flex f-center g12">
<div className={`fi fi-${lang.split(/[-_]/i)[1]?.toLowerCase()}`}></div>
<div className="uppercase pointer">
<b>{lang.includes("-") ? lang.split("-")[0] : lang}</b>
</div>
</div>
}
align="end"
gap={5}>
{AllLocales.sort().map(l => (
<MenuItem onClick={() => setLang(l)} key={l}>
{new Intl.DisplayNames([l], {
type: "language",
}).of(l)}
</MenuItem>
))}
</Menu>
);
}
function loggedIn() {
if (!login) return;
@ -46,6 +76,14 @@ export function LayoutPage() {
<Icon name="user" size={24} />
<FormattedMessage defaultMessage="Profile" />
</MenuItem>
<MenuItem onClick={() => navigate("/settings")}>
<Icon name="settings" size={24} />
<FormattedMessage defaultMessage="Settings" />
</MenuItem>
<MenuItem onClick={() => navigate("/widgets")}>
<Icon name="widget" size={24} />
<FormattedMessage defaultMessage="Widgets" />
</MenuItem>
<MenuItem onClick={() => Login.logout()}>
<Icon name="logout" size={24} />
<FormattedMessage defaultMessage="Logout" />
@ -58,14 +96,16 @@ export function LayoutPage() {
function loggedOut() {
if (login) return;
function handleLogin() {
setShowLogin(true);
}
return (
<Dialog.Root open={showLogin} onOpenChange={setShowLogin}>
<Dialog.Trigger asChild>
<button type="button" className="btn btn-border" onClick={() => setShowLogin(true)}>
<FormattedMessage defaultMessage="Login" />
<Icon name="login" />
</button>
</Dialog.Trigger>
<button type="button" className="btn btn-border" onClick={handleLogin}>
<FormattedMessage defaultMessage="Login" />
<Icon name="login" />
</button>
<Dialog.Portal>
<Dialog.Overlay className="dialog-overlay" />
<Dialog.Content className="dialog-content">
@ -83,12 +123,13 @@ export function LayoutPage() {
</Helmet>
<header>
<div className="logo" onClick={() => navigate("/")}></div>
<div className="paper">
{/*<div className="paper">
<input className="search-input" type="text" placeholder="Search" />
<Icon name="search" size={15} />
</div>
</div>*/}
<div className="f-grow">{/* Future menu items go here */}</div>
<div className="header-right">
{langSelector()}
{loggedIn()}
{loggedOut()}
</div>

View File

@ -15,7 +15,7 @@ export function ConfigureNostrType() {
async function tryConnect() {
try {
const api = new Nip103StreamProvider(url);
const api = new Nip103StreamProvider(new URL(url).host, url);
const inf = await api.info();
setInfo(inf);
} catch (e) {
@ -58,7 +58,7 @@ export function ConfigureNostrType() {
<button
className="btn btn-border"
onClick={() => {
StreamProviderStore.add(new Nip103StreamProvider(url));
StreamProviderStore.add(new Nip103StreamProvider(new URL(url).host, url));
navigate("/");
}}>
<FormattedMessage defaultMessage="Save" />

View File

@ -1,4 +1,5 @@
import "./root.css";
import { FormattedMessage } from "react-intl";
import { useCallback } from "react";
import type { NostrEvent } from "@snort/system";
@ -31,7 +32,9 @@ export function RootPage() {
<div className="homepage">
{hasFollowingLive && (
<>
<h2 className="divider line one-line">Following</h2>
<h2 className="divider line one-line">
<FormattedMessage defaultMessage="Following" />
</h2>
<div className="video-grid">
{following.map(e => (
<VideoTile ev={e} key={e.id} />
@ -66,7 +69,9 @@ export function RootPage() {
))}
{hasFollowingLive && liveNow.length > 0 && (
<>
<h2 className="divider line one-line">Live</h2>
<h2 className="divider line one-line">
<FormattedMessage defaultMessage="Live" />
</h2>
<div className="video-grid">
{liveNow
.filter(e => !mutedHosts.has(getHost(e)))
@ -78,7 +83,9 @@ export function RootPage() {
)}
{plannedEvents.length > 0 && (
<>
<h2 className="divider line one-line">Planned</h2>
<h2 className="divider line one-line">
<FormattedMessage defaultMessage="Planned" />
</h2>
<div className="video-grid">
{plannedEvents.map(e => (
<VideoTile ev={e} key={e.id} />
@ -88,7 +95,9 @@ export function RootPage() {
)}
{endedEvents.length > 0 && (
<>
<h2 className="divider line one-line">Ended</h2>
<h2 className="divider line one-line">
<FormattedMessage defaultMessage="Ended" />
</h2>
<div className="video-grid">
{endedEvents.map(e => (
<VideoTile ev={e} key={e.id} />

View File

@ -0,0 +1,34 @@
.settings-page {
width: 753px;
margin-left: auto;
margin-right: auto;
}
@media (max-width: 1020px) {
.settings-page {
padding: 0 24px;
width: calc(100vw - 48px);
margin: unset;
overflow-y: hidden;
}
}
.settings-page .tab-content {
overflow-wrap: break-word;
overflow: hidden;
padding: 24px;
border-radius: 24px;
background: #171717;
}
.settings-page .tab-options > div {
padding: 8px 16px;
cursor: pointer;
font-size: 18px;
font-weight: 600;
}
.settings-page .tab-options > div:hover {
border-radius: 8px;
background: #171717;
}

View File

@ -0,0 +1,77 @@
import "./settings-page.css";
import { useEffect, useState } from "react";
import { useNavigate } from "react-router-dom";
import { FormattedMessage } from "react-intl";
import { Button as AlbyZapsButton } from "@getalby/bitcoin-connect-react";
import { hexToBech32 } from "@snort/shared";
import { useLogin } from "hooks/login";
import Copy from "element/copy";
const enum Tab {
Account,
Notifications,
}
export function SettingsPage() {
const navigate = useNavigate();
const login = useLogin();
const [tab, setTab] = useState(Tab.Account);
useEffect(() => {
if (!login) {
navigate("/");
}
}, [login]);
function tabContent() {
switch (tab) {
case Tab.Account: {
return (
<>
<h1>
<FormattedMessage defaultMessage="Account" />
</h1>
{login?.pubkey && (
<div className="public-key">
<p>
<FormattedMessage defaultMessage="Logged in as" />
</p>
<Copy text={hexToBech32("npub", login.pubkey)} />
</div>
)}
{login?.privateKey && (
<div className="private-key">
<p>
<FormattedMessage defaultMessage="Private key" />
</p>
<Copy text={hexToBech32("nsec", login.privateKey)} />
</div>
)}
<h1>
<FormattedMessage defaultMessage="Zaps" />
</h1>
<AlbyZapsButton />
</>
);
}
}
}
return (
<div className="settings-page">
<div className="flex f-col g48">
<h1>
<FormattedMessage defaultMessage="Settings" />
</h1>
<div className="flex g24 f-col-mobile">
<div className="flex f-col g24 tab-options">
<div onClick={() => setTab(Tab.Account)}>
<FormattedMessage defaultMessage="Account" />
</div>
</div>
<div className="tab-content">{tabContent()}</div>
</div>
</div>
</div>
);
}

View File

@ -1,11 +1,10 @@
import "./stream-page.css";
import { NostrLink, NostrPrefix, TaggedNostrEvent, tryParseNostrLink } from "@snort/system";
import { fetchNip05Pubkey } from "@snort/shared";
import { useLocation, useNavigate, useParams } from "react-router-dom";
import { NostrLink, TaggedNostrEvent } from "@snort/system";
import { useLocation, useNavigate } from "react-router-dom";
import { Helmet } from "react-helmet";
import { LiveVideoPlayer } from "element/live-video-player";
import { createNostrLink, findTag, getEventFromLocationState, getHost, hexToBech32 } from "utils";
import { eventToLink, findTag, getEventFromLocationState, getHost } from "utils";
import { Profile, getName } from "element/profile";
import { LiveChat } from "element/live-chat";
import AsyncButton from "element/async-button";
@ -24,7 +23,8 @@ import { StreamTimer } from "element/stream-time";
import { ShareMenu } from "element/share-menu";
import { ContentWarningOverlay, isContentWarningAccepted } from "element/content-warning";
import { useCurrentStreamFeed } from "hooks/current-stream-feed";
import { useEffect, useState } from "react";
import { useStreamLink } from "hooks/stream-link";
import { FormattedMessage } from "react-intl";
function ProfileInfo({ ev, goal }: { ev?: NostrEvent; goal?: TaggedNostrEvent }) {
const login = useLogin();
@ -55,7 +55,11 @@ function ProfileInfo({ ev, goal }: { ev?: NostrEvent; goal?: TaggedNostrEvent })
<p>{findTag(ev, "summary")}</p>
<div className="tags">
<StatePill state={status as StreamState} />
{viewers > 0 && <span className="pill viewers">{formatSats(viewers)} viewers</span>}
{viewers > 0 && (
<span className="pill viewers">
<FormattedMessage defaultMessage="{n} viewers" values={{ n: formatSats(viewers) }} />
</span>
)}
{status === StreamState.Live && (
<span className="pill">
<StreamTimer ev={ev} />
@ -67,7 +71,7 @@ function ProfileInfo({ ev, goal }: { ev?: NostrEvent; goal?: TaggedNostrEvent })
<div className="actions">
{ev && <NewStreamDialog text="Edit" ev={ev} btnClassName="btn" />}
<AsyncButton type="button" className="btn btn-warning" onClick={deleteStream}>
Delete
<FormattedMessage defaultMessage="Delete" />
</AsyncButton>
</div>
)}
@ -97,30 +101,9 @@ function ProfileInfo({ ev, goal }: { ev?: NostrEvent; goal?: TaggedNostrEvent })
}
export function StreamPageHandler() {
const params = useParams();
const location = useLocation();
const evPreload = getEventFromLocationState(location.state);
const [link, setLink] = useState<NostrLink>();
useEffect(() => {
if (params.id) {
const parsedLink = tryParseNostrLink(params.id);
if (parsedLink) {
setLink(parsedLink);
} else {
const [handle, domain] = (params.id.includes("@") ? params.id : `${params.id}@zap.stream`).split("@");
fetchNip05Pubkey(handle, domain).then(d => {
if (d) {
setLink({
id: d,
type: NostrPrefix.PublicKey,
encode: () => hexToBech32(NostrPrefix.PublicKey, d),
} as NostrLink);
}
});
}
}
}, [params.id]);
const link = useStreamLink();
if (link) {
return <StreamPage link={link} evPreload={evPreload} />;
@ -130,7 +113,8 @@ export function StreamPageHandler() {
export function StreamPage({ link, evPreload }: { evPreload?: NostrEvent; link: NostrLink }) {
const ev = useCurrentStreamFeed(link, true, evPreload);
const host = getHost(ev);
const goal = useZapGoal(host, createNostrLink(ev), true);
const evLink = ev ? eventToLink(ev) : undefined;
const goal = useZapGoal(findTag(ev, "goal"));
const title = findTag(ev, "title");
const summary = findTag(ev, "summary");
@ -161,7 +145,7 @@ export function StreamPage({ link, evPreload }: { evPreload?: NostrEvent; link:
<ProfileInfo ev={ev} goal={goal} />
<StreamCards host={host} />
</div>
<LiveChat link={createNostrLink(ev) ?? link} ev={ev} goal={goal} />
<LiveChat link={evLink ?? link} ev={ev} goal={goal} />
</div>
);
}

10
src/pages/widgets.css Normal file
View File

@ -0,0 +1,10 @@
.widgets {
display: grid;
grid-template-columns: repeat(4, 1fr);
}
.widgets > div {
background-color: #3f3f3f;
border-radius: 16px;
padding: 8px 12px;
}

208
src/pages/widgets.tsx Normal file
View File

@ -0,0 +1,208 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import "./widgets.css";
import { useState, useMemo } from "react";
import { useIntl, FormattedMessage } from "react-intl";
import { NostrPrefix, createNostrLink } from "@snort/system";
import Copy from "element/copy";
import { useCurrentStreamFeed } from "hooks/current-stream-feed";
import { getVoices, speak, toTextToSpeechParams } from "text2speech";
import { useLogin } from "hooks/login";
import { eventToLink, hexToBech32 } from "utils";
import { ZapAlertItem } from "./widgets/zaps";
import { TopZappersWidget } from "./widgets/top-zappers";
import { Views } from "./widgets/views";
import { Music } from "./widgets/music";
import groupBy from "lodash/groupBy";
interface ZapAlertConfigurationProps {
npub: string;
baseUrl: string;
}
function ZapAlertConfiguration({ npub, baseUrl }: ZapAlertConfigurationProps) {
const login = useLogin();
const { formatMessage, formatDisplayName } = useIntl();
const [testText, setTestText] = useState("");
const [textToSpeech, setTextToSpeech] = useState<boolean>(false);
const [voice, setVoice] = useState<string | null>(null);
const [minSatsForTextToSpeech, setMinSatsForTextToSpeech] = useState<string>("21");
const [volume, setVolume] = useState<number>(1);
// Google propietary voices are not available on OBS browser
const voices = getVoices().filter(v => !v.name.includes("Google"));
const groupedVoices = useMemo(() => {
return groupBy(voices, v => v.lang);
}, [voices]);
const languages = useMemo(() => {
return Object.keys(groupedVoices).sort();
}, [groupedVoices]);
const selectedVoice = useMemo(() => {
return voices.find(v => v.voiceURI === voice);
}, [voice]);
const isTextToSpeechSupported = "speechSynthesis" in window;
const isTextToSpeechEnabled = voices.length > 0 && textToSpeech;
const query = useMemo(() => {
const params = toTextToSpeechParams({
voiceURI: voice,
minSats: voice ? Number(minSatsForTextToSpeech) : null,
volume,
});
const queryParams = params.toString();
return queryParams.length > 0 ? `?${queryParams}` : "";
}, [voice, volume, minSatsForTextToSpeech]);
function testVoice() {
if (selectedVoice) {
speak(selectedVoice, testText, volume);
}
}
return (
<>
<h3>
<FormattedMessage defaultMessage="Zap Alert" />
</h3>
<Copy text={`${baseUrl}/alert/${npub}/zaps${query}`} />
<ZapAlertItem
item={{
id: "",
valid: true,
content: testText,
zapService: "",
anonZap: false,
errors: [],
sender: login?.pubkey,
amount: 1_000_000,
}}
/>
<div className="text-to-speech-settings">
<div
className="paper"
onClick={() => setTextToSpeech(!textToSpeech)}
style={{ cursor: isTextToSpeechSupported ? "pointer" : "not-allowed" }}>
<input
disabled={!isTextToSpeechSupported}
type="checkbox"
checked={textToSpeech}
onChange={ev => setTextToSpeech(ev.target.checked)}
/>
<FormattedMessage defaultMessage="Enable text to speech" />
</div>
{isTextToSpeechEnabled && (
<>
<div className="paper labeled-input">
<label htmlFor="minimum-sats">
<FormattedMessage defaultMessage="Minimum amount for text to speech" />
</label>
<input
id="minimum-sats"
type="number"
min="1"
value={minSatsForTextToSpeech}
onChange={ev => setMinSatsForTextToSpeech(ev.target.value)}
/>
</div>
<div className="paper labeled-input">
<label htmlFor="volume">
<FormattedMessage defaultMessage="Volume" />
</label>
<input
id="volume"
type="number"
min="0"
max="1"
step="0.1"
value={volume}
onChange={ev => setVolume(Number(ev.target.value))}
/>
</div>
<div className="paper labeled-input">
<label htmlFor="voice-selector">
<FormattedMessage defaultMessage="Voice" />
</label>
<select id="voice-selector" onChange={ev => setVoice(ev.target.value)}>
<option value="">
<FormattedMessage defaultMessage="Select voice..." />
</option>
{languages.map(l => (
<optgroup label={formatDisplayName(l, { type: "language" })}>
{groupedVoices[l].map(v => (
<option value={v.voiceURI}>{v.name}</option>
))}
</optgroup>
))}
</select>
</div>
{voice && (
<>
<div className="paper labeled-input">
<label htmlFor="zap-alert-text">
<FormattedMessage defaultMessage="Zap message" />
</label>
<textarea
id="zap-alert-text"
placeholder={formatMessage({ defaultMessage: "Insert text to speak" })}
value={testText}
onChange={ev => setTestText(ev.target.value)}
/>
</div>
<button disabled={testText.length === 0} className="btn" onClick={testVoice}>
<FormattedMessage defaultMessage="Test voice" />
</button>
</>
)}
</>
)}
</div>
</>
);
}
export function WidgetsPage() {
const login = useLogin();
const profileLink = createNostrLink(NostrPrefix.PublicKey, login?.pubkey ?? "");
const current = useCurrentStreamFeed(profileLink);
const currentLink = current ? eventToLink(current) : undefined;
const npub = hexToBech32("npub", login?.pubkey);
const baseUrl = `${window.location.protocol}//${window.location.host}`;
return (
<div className="widgets g8">
<div className="flex f-col g8">
<h3>
<FormattedMessage defaultMessage="Chat Widget" />
</h3>
<Copy text={`${baseUrl}/chat/${npub}`} />
</div>
<div className="flex f-col g8">
<ZapAlertConfiguration npub={npub} baseUrl={baseUrl} />
</div>
<div className="flex f-col g8">
<h3>
<FormattedMessage defaultMessage="Top Zappers" />
</h3>
<Copy text={`${baseUrl}/alert/${npub}/top-zappers`} />
{currentLink && <TopZappersWidget link={currentLink} />}
</div>
<div className="flex f-col g8">
<h3>
<FormattedMessage defaultMessage="Current Viewers" />
</h3>
<Copy text={`${baseUrl}/alert/${npub}/views`} />
{currentLink && <Views link={currentLink} />}
</div>
<div className="flex f-col g8">
<h3>
<FormattedMessage defaultMessage="Music" />
</h3>
<Copy text={`${baseUrl}/alert/${npub}/music`} />
{currentLink && <Music link={currentLink} />}
</div>
</div>
);
}

View File

@ -0,0 +1,22 @@
import { NostrLink } from "@snort/system";
import { unixNow } from "@snort/shared";
import { useCurrentStreamFeed } from "hooks/current-stream-feed";
import { useStatus } from "hooks/status";
import { getHost, findTag } from "utils";
export function Music({ link }: { link: NostrLink }) {
const currentEvent = useCurrentStreamFeed(link, true);
const host = getHost(currentEvent);
const nowPlaying = useStatus("music", host, true);
const cover = nowPlaying && findTag(nowPlaying, "cover");
const expiry = nowPlaying && findTag(nowPlaying, "expiration");
const isExpired = expiry && Number(expiry) < unixNow();
return (
(nowPlaying && !isExpired) && (
<div className="music">
{cover && <img className="cover" src={cover} alt={nowPlaying.content} />}
{nowPlaying && <p className="track">🎵 {nowPlaying.content}</p>}
</div>
)
);
}

View File

@ -0,0 +1,21 @@
import { NostrLink } from "@snort/system";
import { TopZappers } from "element/top-zappers";
import { useCurrentStreamFeed } from "hooks/current-stream-feed";
import { useZaps } from "hooks/zaps";
import { FormattedMessage } from "react-intl";
import { eventToLink } from "utils";
export function TopZappersWidget({ link }: { link: NostrLink }) {
const currentEvent = useCurrentStreamFeed(link, true);
const zaps = useZaps(currentEvent ? eventToLink(currentEvent) : undefined, true);
return (
<div className="top-zappers-widget">
<div>
<FormattedMessage defaultMessage="Top Zappers" />
</div>
<div className="flex g8">
<TopZappers zaps={zaps} limit={3} />
</div>
</div>
);
}

View File

@ -0,0 +1,20 @@
import { NostrLink } from "@snort/system";
import { useCurrentStreamFeed } from "hooks/current-stream-feed";
import { FormattedMessage } from "react-intl";
import { findTag } from "utils";
export function Views({ link }: { link: NostrLink }) {
const current = useCurrentStreamFeed(link, true);
const viewers = findTag(current, "current_participants");
const n = Number(viewers);
return (
<div className="views">
{isNaN(n) ? (
<FormattedMessage defaultMessage="No viewer data available" />
) : (
<FormattedMessage defaultMessage="{n} viewers" values={{ n }} />
)}
</div>
);
}

102
src/pages/widgets/zaps.tsx Normal file
View File

@ -0,0 +1,102 @@
import { useMemo, useState, useEffect } from "react";
import { hexToBech32 } from "@snort/shared";
import type { NostrLink, ParsedZap } from "@snort/system";
import { useUserProfile } from "@snort/system-react";
import { useCurrentStreamFeed } from "hooks/current-stream-feed";
import { useZaps } from "hooks/zaps";
import { useMutedPubkeys } from "hooks/lists";
import { formatSats } from "number";
import { useTextToSpeechParams, getVoices, speak } from "text2speech";
import { FormattedMessage } from "react-intl";
import { getHost, eventToLink } from "utils";
function useZapQueue(zapStream: ParsedZap[], zapTime = 10_000) {
const zaps = useMemo(() => {
return zapStream.reverse();
}, [zapStream]);
const [currentIndex, setCurrentIndex] = useState<number>(0);
const zap = useMemo(() => {
return zaps.at(currentIndex);
}, [zaps, currentIndex]);
useEffect(() => {
if (zap) {
setTimeout(() => {
setCurrentIndex(currentIndex + 1);
}, zapTime);
}
}, [zap]);
return zap;
}
export function ZapAlerts({ link }: { link: NostrLink }) {
const currentEvent = useCurrentStreamFeed(link, true);
const currentLink = currentEvent ? eventToLink(currentEvent) : undefined;
const host = getHost(currentEvent);
const zaps = useZaps(currentLink, true);
const zap = useZapQueue(zaps);
const mutedPubkeys = useMutedPubkeys(host, true);
const { voiceURI, minSats, volume } = useTextToSpeechParams();
const voices = getVoices();
const voice = useMemo(() => {
return voices.find(v => v.voiceURI === voiceURI);
}, [voices, voiceURI]);
useEffect(() => {
if (!zap) return;
if (mutedPubkeys.has(zap?.sender ?? "")) {
return;
}
const text = zap.content ?? "";
if (text.length > 0 && voice) {
try {
if (zap.amount >= minSats) {
speak(voice, text, volume);
}
} catch (e) {
console.error(e);
}
}
}, [zap?.id]);
return <div className="flex f-center f-col zap-alerts-widget">{zap && <ZapAlertItem key={zap.id} item={zap} />}</div>;
}
export function ZapAlertItem({ item }: { item: ParsedZap }) {
const profile = useUserProfile(item.sender);
if (!profile) return;
return (
<>
<div className="zap-alert">
<div className="zap-alert-title">
<FormattedMessage defaultMessage="Incoming Zap" />
</div>
<div className="zap-alert-header">
<FormattedMessage
defaultMessage="{name} with {amount}"
values={{
name: (
<span className="highlight">
{profile?.name ?? hexToBech32("npub", item?.sender ?? "").slice(0, 12)}&nbsp;
</span>
),
amount: <span className="highlight">&nbsp;{formatSats(item.amount)}</span>,
}}
/>
</div>
{item.content && item.content.length > 0 && (
<p dir="auto" className="zap-alert-body">
{item.content}
</p>
)}
</div>
</>
);
}

View File

@ -69,10 +69,13 @@ export interface StreamProviderStreamInfo {
title: string;
summary: string;
image: string;
tags: Array<string>;
content_warning: string;
tags?: Array<string>;
content_warning?: string;
goal?: string;
}
export const DefaultProvider = new Nip103StreamProvider("zap.stream", "https://api.zap.stream/api/nostr/");
export class ProviderStore extends ExternalStore<Array<StreamProvider>> {
#providers: Array<StreamProvider> = [];
@ -88,7 +91,7 @@ export class ProviderStore extends ExternalStore<Array<StreamProvider>> {
break;
}
case StreamProviders.NostrType: {
this.#providers.push(new Nip103StreamProvider(c.url as string));
this.#providers.push(new Nip103StreamProvider(new URL(c.url as string).host, c.url as string));
break;
}
case StreamProviders.Owncast: {
@ -107,8 +110,7 @@ export class ProviderStore extends ExternalStore<Array<StreamProvider>> {
}
takeSnapshot() {
const defaultProvider = new Nip103StreamProvider("https://api.zap.stream/api/nostr/");
return [defaultProvider, new ManualProvider(), ...this.#providers];
return [DefaultProvider, new ManualProvider(), ...this.#providers];
}
#save() {

View File

@ -1,3 +1,4 @@
import { base64 } from "@scure/base";
import {
StreamProvider,
StreamProviderEndpoint,
@ -5,20 +6,16 @@ import {
StreamProviderStreamInfo,
StreamProviders,
} from ".";
import { EventKind, NostrEvent } from "@snort/system";
import { EventKind, EventPublisher, NostrEvent } from "@snort/system";
import { Login, StreamState } from "index";
import { getPublisher } from "login";
import { findTag } from "utils";
export class Nip103StreamProvider implements StreamProvider {
#url: string;
#publisher?: EventPublisher;
constructor(url: string) {
this.#url = url;
}
get name() {
return new URL(this.#url).host;
constructor(readonly name: string, readonly url: string, pub?: EventPublisher) {
this.#publisher = pub;
}
get type() {
@ -52,7 +49,7 @@ export class Nip103StreamProvider implements StreamProvider {
createConfig() {
return {
type: StreamProviders.NostrType,
url: this.#url,
url: this.url,
};
}
@ -62,12 +59,14 @@ export class Nip103StreamProvider implements StreamProvider {
const image = findTag(ev, "image");
const tags = ev?.tags.filter(a => a[0] === "t").map(a => a[1]);
const contentWarning = findTag(ev, "content-warning");
const goal = findTag(ev, "goal");
await this.#getJson("PATCH", "event", {
title,
summary,
image,
tags,
content_warning: contentWarning,
goal,
});
}
@ -83,11 +82,17 @@ export class Nip103StreamProvider implements StreamProvider {
}
async #getJson<T>(method: "GET" | "POST" | "PATCH", path: string, body?: unknown): Promise<T> {
const login = Login.snapshot();
const pub = login && getPublisher(login);
const pub = (() => {
if (this.#publisher) {
return this.#publisher;
} else {
const login = Login.snapshot();
return login && getPublisher(login);
}
})();
if (!pub) throw new Error("No signer");
const u = `${this.#url}${path}`;
const u = `${this.url}${path}`;
const token = await pub.generic(eb => {
return eb.kind(EventKind.HttpAuthentication).content("").tag(["u", u]).tag(["method", method]);
});
@ -96,7 +101,7 @@ export class Nip103StreamProvider implements StreamProvider {
body: body ? JSON.stringify(body) : undefined,
headers: {
"content-type": "application/json",
authorization: `Nostr ${btoa(JSON.stringify(token))}`,
authorization: `Nostr ${base64.encode(new TextEncoder().encode(JSON.stringify(token)))}`,
},
});
const json = await rsp.text();

60
src/text2speech.ts Normal file
View File

@ -0,0 +1,60 @@
import { useMemo } from "react";
import { useLocation } from "react-router-dom";
function useQuery() {
const { search } = useLocation();
return useMemo(() => new URLSearchParams(search), [search]);
}
interface TextToSpeechConfig {
voiceURI: string | null;
minSats: number;
volume: number;
}
export function useTextToSpeechParams(): TextToSpeechConfig {
const q = useQuery();
const voiceURI = q.get("voiceURI");
const minSats = Number(q.get("minSats")) ?? 21;
const volume = Number(q.get("volume")) ?? 1;
return { voiceURI, minSats, volume };
}
interface TextToSpeechConfigParams {
voiceURI: string | null;
minSats: number | null;
volume: number | null;
}
export function toTextToSpeechParams(config: TextToSpeechConfigParams): URLSearchParams {
const params = new URLSearchParams();
if (config.voiceURI) {
params.set("voiceURI", config.voiceURI);
}
if (config.minSats) {
params.set("minSats", String(config.minSats));
}
if (config.volume) {
params.set("volume", String(config.volume));
}
return params;
}
export function getVoices() {
if ("speechSynthesis" in window) {
return speechSynthesis.getVoices();
}
return [];
}
export function speak(voice: SpeechSynthesisVoice, text: string, volume: number) {
try {
const utterance = new SpeechSynthesisUtterance(text);
utterance.voice = voice;
utterance.volume = volume;
utterance.rate = 0.8;
speechSynthesis.speak(utterance);
} catch (e) {
console.error(e);
}
}

416
src/translations/af_ZA.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/ar_SA.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "صورة"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/bg_BG.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Изображение"
},
"+AcVD+": {
"defaultMessage": "Без имейли, просто страхотно!"
},
"+vVZ/G": {
"defaultMessage": "Свързване"
},
"/0TOL5": {
"defaultMessage": "Количество"
},
"/EvlqN": {
"defaultMessage": "ностър подписващо разширение"
},
"/GCoTA": {
"defaultMessage": "Изчисти"
},
"04lmFi": {
"defaultMessage": "Запази ключ"
},
"0GfNiL": {
"defaultMessage": "Стрийм Зап Цел"
},
"0VV/sK": {
"defaultMessage": "Цел"
},
"1EYCdR": {
"defaultMessage": "Тагове"
},
"1qsXCO": {
"defaultMessage": "напр.име@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Добави"
},
"2CGh/0": {
"defaultMessage": "на живо"
},
"3HwrQo": {
"defaultMessage": "Зап!"
},
"3adEeb": {
"defaultMessage": "{н} зрители"
},
"3df560": {
"defaultMessage": "Вход със частен ключ"
},
"47FYwb": {
"defaultMessage": "Отказ"
},
"4l69eO": {
"defaultMessage": "Хмм, твоят лайтнинг адрес изглежда грешен"
},
"4l6vz1": {
"defaultMessage": "Копиране"
},
"4uI538": {
"defaultMessage": "Резолюция"
},
"5JcXdV": {
"defaultMessage": "Създай Акаунт"
},
"5QYdPU": {
"defaultMessage": "Време на започване"
},
"5kx+2v": {
"defaultMessage": "Url адрес на сървъра"
},
"6Z2pvJ": {
"defaultMessage": "Стрийм доставчици"
},
"6pr6hJ": {
"defaultMessage": "Минимално количество за текст към реч"
},
"8YT6ja": {
"defaultMessage": "Вмъкнете текст за изговаряне"
},
"9WRlF4": {
"defaultMessage": "Изпрати"
},
"9a9+ww": {
"defaultMessage": "Заглавие"
},
"9anxhq": {
"defaultMessage": "Старт"
},
"AIHaPH": {
"defaultMessage": "{човек} запнат {количество} сатс"
},
"Atr2p4": {
"defaultMessage": "NSFW Съдържание"
},
"AukrPM": {
"defaultMessage": "Няма налични данни за зрителите"
},
"AyGauy": {
"defaultMessage": "Вход"
},
"BGxpTN": {
"defaultMessage": "Стрийм Чат"
},
"Bep/gA": {
"defaultMessage": "Частен ключ"
},
"C81/uG": {
"defaultMessage": "Изход"
},
"D3idYv": {
"defaultMessage": "Настройки"
},
"DZKuuP": {
"defaultMessage": "Вписани сте като"
},
"Dn82AL": {
"defaultMessage": "На живо"
},
"ESyhzp": {
"defaultMessage": "Твоят коментар за {име}"
},
"FjDlus": {
"defaultMessage": "Винаги можете да замените вашият личен адрес по-късно."
},
"Fodi9+": {
"defaultMessage": "Бъди платен от зрители"
},
"G/yZLu": {
"defaultMessage": "Премахване"
},
"Gq6x9o": {
"defaultMessage": "Изображение на корицата"
},
"H/bNs9": {
"defaultMessage": "Запаметете това и пазете в безопасност! ако изгубите този ключ, никога повече няма да имате достъп до акаунта си. Да, толкова е сериозно!"
},
"H5+NAX": {
"defaultMessage": "Баланс"
},
"HAlOn1": {
"defaultMessage": "Име"
},
"I/TubD": {
"defaultMessage": "Изберете цел..."
},
"I1kjHI": {
"defaultMessage": "Поддръжка {намаление}"
},
"IJDKz3": {
"defaultMessage": "Зап количество във {валута}"
},
"INlWvJ": {
"defaultMessage": "Или"
},
"JEsxDw": {
"defaultMessage": "Качване..."
},
"Jq3FDz": {
"defaultMessage": "Съдържание"
},
"K3r6DQ": {
"defaultMessage": "Изтрий"
},
"K3uH1C": {
"defaultMessage": "Офлайн"
},
"K7AkdL": {
"defaultMessage": "Показване"
},
"KkIL3s": {
"defaultMessage": "Не, аз съм под 18"
},
"LknBsU": {
"defaultMessage": "Стрийм ключ"
},
"My6HwN": {
"defaultMessage": "Ок, безопасно е"
},
"O2Cy6m": {
"defaultMessage": "Да, Аз съм на 18 или повече"
},
"OEW7yJ": {
"defaultMessage": "Запове!"
},
"OKhRC6": {
"defaultMessage": "Сподели"
},
"OWgHbg": {
"defaultMessage": "Редактирай картата"
},
"Oxqtyf": {
"defaultMessage": "Свързахме ви със светкавичен портфейл, за да можете да получите плащане от зрителите веднага!"
},
"Q3au2v": {
"defaultMessage": "Относно {очаквано}"
},
"QRHNuF": {
"defaultMessage": "Какво стриймваме днес?"
},
"QRRCp0": {
"defaultMessage": "Стрийм ULR"
},
"QceMQZ": {
"defaultMessage": "Цел: {количесто}"
},
"Qe1MJu": {
"defaultMessage": "{име} със {количество}"
},
"RJOmzk": {
"defaultMessage": "Прочетох и се съгласявам със {доставчика} и неговите {общи условия}."
},
"RXQdxR": {
"defaultMessage": "Моля влезте в профила си за да може да пишете съобщения!"
},
"RrCui3": {
"defaultMessage": "Обобщение"
},
"TP/cMX": {
"defaultMessage": "Приключено"
},
"TaTRKo": {
"defaultMessage": "Започни Стрийм"
},
"TwyMau": {
"defaultMessage": "Акаунт"
},
"UJBFYK": {
"defaultMessage": "Добави карта"
},
"UfSot5": {
"defaultMessage": "Изминали Стриймове"
},
"VA/Z1S": {
"defaultMessage": "Скрий"
},
"W9355R": {
"defaultMessage": "Премахни заглушаването"
},
"X2PZ7D": {
"defaultMessage": "Създаване на цел"
},
"YPh5Nq": {
"defaultMessage": "@ {курс}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Този метод не е сигурен. Препоръчваме ви да използвате {ностърлинк}"
},
"ZmqxZs": {
"defaultMessage": "Можете да промените това по-късно"
},
"acrOoz": {
"defaultMessage": "Продължаване"
},
"cPIKU2": {
"defaultMessage": "Последвани"
},
"cvAsEh": {
"defaultMessage": "Стриймнат на {дата}"
},
"cyR7Kh": {
"defaultMessage": "Назад"
},
"d5zWyh": {
"defaultMessage": "Тестов глас"
},
"dVD/AR": {
"defaultMessage": "Топ запери"
},
"ebmhes": {
"defaultMessage": "Ностър добавка"
},
"f6biFA": {
"defaultMessage": "Ох, и ти имаш {н} безплатни сатс за стриймване от нас!💜"
},
"fBI91o": {
"defaultMessage": "Зап"
},
"fc2iho": {
"defaultMessage": "Добавям файлове"
},
"feZ/kG": {
"defaultMessage": "Вход със частен ключ (несигурно)"
},
"hGQqkW": {
"defaultMessage": "Планиран"
},
"heyxZL": {
"defaultMessage": "Активиране на текст към реч"
},
"hpl4BP": {
"defaultMessage": "Чат джаджа"
},
"ieGrWo": {
"defaultMessage": "Последване"
},
"itPgxd": {
"defaultMessage": "Профил"
},
"izWS4J": {
"defaultMessage": "Прекратете следенето"
},
"jr4+vD": {
"defaultMessage": "Намаление"
},
"jvo0vs": {
"defaultMessage": "Запамети"
},
"k21gTS": {
"defaultMessage": "напр. за мен"
},
"kp0NPF": {
"defaultMessage": "Планирано"
},
"lZpRMR": {
"defaultMessage": "Проверете тук дали този стрийм съдържа голота или порнографско съдържание."
},
"ljmS5P": {
"defaultMessage": "Крайна точка"
},
"mnJYBQ": {
"defaultMessage": "Глас"
},
"mtNGwh": {
"defaultMessage": "Кратко описание на съдържанието"
},
"nBCvvJ": {
"defaultMessage": "Допълване"
},
"nOaArs": {
"defaultMessage": "Настройване на профила"
},
"nwA8Os": {
"defaultMessage": "Добавяне на карта"
},
"oHPB8Q": {
"defaultMessage": "Зап {име}"
},
"oZrFyI": {
"defaultMessage": "Стрийм тип трябва да бъде HLS"
},
"pO/lPX": {
"defaultMessage": "Планирано за {дата}"
},
"r2Jjms": {
"defaultMessage": "Вход"
},
"rWBFZA": {
"defaultMessage": "Сексуално явен материал напред!"
},
"rbrahO": {
"defaultMessage": "Затвори"
},
"rfC1Zq": {
"defaultMessage": "Запази карта"
},
"rgsbu9": {
"defaultMessage": "Текущи Зрители"
},
"s5ksS7": {
"defaultMessage": "Линк към изображението"
},
"s7V+5p": {
"defaultMessage": "Потвърдете възрастта си"
},
"sInm1h": {
"defaultMessage": "Зап съобщение"
},
"tG1ST3": {
"defaultMessage": "Входящ Зап"
},
"tM6fNW": {
"defaultMessage": "Стахотно! Продължете.."
},
"thsiMl": {
"defaultMessage": "общи условия"
},
"tzMNF3": {
"defaultMessage": "Състояние"
},
"u6uD94": {
"defaultMessage": "Създай акаунт"
},
"uYw2LD": {
"defaultMessage": "Стрийм"
},
"vrTOHJ": {
"defaultMessage": "{количество} сатс"
},
"w0Xm2F": {
"defaultMessage": "Започнете да пишете"
},
"wCIL7o": {
"defaultMessage": "Излъчване във Ностър"
},
"wEQDC6": {
"defaultMessage": "Редактирай"
},
"wMKVFz": {
"defaultMessage": "Избери глас..."
},
"wOy57k": {
"defaultMessage": "Добави стрийм цел"
},
"wzWWzV": {
"defaultMessage": "Топ запери"
},
"x82IOl": {
"defaultMessage": "Заглуши"
},
"y867Vs": {
"defaultMessage": "Сила на звука"
},
"yzKwBQ": {
"defaultMessage": "напр. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Зап Тревога"
}
}

421
src/translations/bn_BD.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "ছবি"
},
"+AcVD+": {
"defaultMessage": "কোনো ইমেইল নয়, কেবল বিস্ময়!"
},
"+vVZ/G": {
"defaultMessage": "সংযুক্ত হোন"
},
"/0TOL5": {
"defaultMessage": "পরিমাণ"
},
"/EvlqN": {
"defaultMessage": "নস্টারে স্বাক্ষরকারীর এক্সটেনশন"
},
"/GCoTA": {
"defaultMessage": "পরিষ্কার"
},
"04lmFi": {
"defaultMessage": "চাবি সংরক্ষণ করুন"
},
"0GfNiL": {
"defaultMessage": "Stream Zap লক্ষ্য ও উদ্দেশ্য"
},
"0VV/sK": {
"defaultMessage": "লক্ষ্য ও উদ্দেশ্য"
},
"1EYCdR": {
"defaultMessage": "ট্যাগগুলি"
},
"1qsXCO": {
"defaultMessage": "যেমন: name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "যুক্ত করুন"
},
"2CGh/0": {
"defaultMessage": "সরাসরি সম্প্রচার"
},
"3HwrQo": {
"defaultMessage": "জ্যাপ!"
},
"3adEeb": {
"defaultMessage": "{n} দর্শক"
},
"3df560": {
"defaultMessage": "ব্যক্তিগত-চাবি দিয়ে লগইন করুন"
},
"47FYwb": {
"defaultMessage": "বাতিল করুন"
},
"4l69eO": {
"defaultMessage": "হুম, আপনার বিজলি ঠিকানাটি সঠিক নয়"
},
"4l6vz1": {
"defaultMessage": "প্রতিলিপি তৈরি করুন"
},
"4uI538": {
"defaultMessage": "রেজোলিউশন"
},
"5JcXdV": {
"defaultMessage": "অ্যাকাউন্ট তৈরি করুন"
},
"5QYdPU": {
"defaultMessage": "সময় শুরু করুন"
},
"5kx+2v": {
"defaultMessage": "সার্ভারের Url"
},
"6Z2pvJ": {
"defaultMessage": "স্ট্রিম প্রদানকারীরা"
},
"6pr6hJ": {
"defaultMessage": "মূলপাঠ থেকে পড়ার জন্য ন্যূনতম পরিমাণ"
},
"8YT6ja": {
"defaultMessage": "পড়ার জন্য মূলপাঠ সন্নিবেশ করুন"
},
"9WRlF4": {
"defaultMessage": "পাঠান"
},
"9a9+ww": {
"defaultMessage": "শিরোনাম"
},
"9anxhq": {
"defaultMessage": "শুরু"
},
"AIHaPH": {
"defaultMessage": "{person} {amount} পরিমাণ স্যাট জ্যাপ করেছেন"
},
"Atr2p4": {
"defaultMessage": "NSFW আধেয়"
},
"AukrPM": {
"defaultMessage": "দর্শকদের কোনো তথ্য সংগ্রহে নেই"
},
"AyGauy": {
"defaultMessage": "লগইন করুন"
},
"BGxpTN": {
"defaultMessage": "চ্যাট স্ট্রিম করুন"
},
"Bep/gA": {
"defaultMessage": "ব্যক্তিগত চাবি"
},
"C81/uG": {
"defaultMessage": "লগ আউট করুন"
},
"D3idYv": {
"defaultMessage": "সেটিংস"
},
"DZKuuP": {
"defaultMessage": "যে অ্যাকাউন্টে লগইন করা আছে"
},
"Dn82AL": {
"defaultMessage": "সরাসরি সম্প্রচার"
},
"ESyhzp": {
"defaultMessage": "{name} এর উদ্দেশে আপনার মন্তব্য"
},
"FjDlus": {
"defaultMessage": "আপনি পরে সর্বদাই এটাকে নিজের ঠিকানা দিয়ে প্রতিস্থাপন করতে পারবেন।"
},
"Fodi9+": {
"defaultMessage": "দর্শকদের কাছ থেকে পারিশ্রমিক নিন"
},
"G/yZLu": {
"defaultMessage": "অপসারণ করুন"
},
"Gq6x9o": {
"defaultMessage": "কভারের ছবি"
},
"H/bNs9": {
"defaultMessage": "এটি সংরক্ষণ করুন এবং নিরাপদে রাখুন! আপনি যদি এই চাবিটি হারিয়ে ফেলেন, তাহলে আপনি আর কখনো আপনার অ্যাকাউন্টে প্রবেশ করতে পারবেন না৷ হ্যাঁ, এটা অত্যন্ত গুরুত্বপূর্ণ!"
},
"H5+NAX": {
"defaultMessage": "জমাখরচ"
},
"HAlOn1": {
"defaultMessage": "নাম"
},
"I/TubD": {
"defaultMessage": "একটি লক্ষ্য নির্বাচন করুন..."
},
"I1kjHI": {
"defaultMessage": "{markdown} সাপোর্ট করে"
},
"IJDKz3": {
"defaultMessage": "{currency} পরিমাণ জ্যাপ"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "আপলোড করা হচ্ছে..."
},
"Jq3FDz": {
"defaultMessage": "আধেয়"
},
"K3r6DQ": {
"defaultMessage": "মুছে ফেলুন"
},
"K3uH1C": {
"defaultMessage": "অফলাইন"
},
"K7AkdL": {
"defaultMessage": "দেখান"
},
"KkIL3s": {
"defaultMessage": "না, আমি ১৮ বছরের নিচে"
},
"LknBsU": {
"defaultMessage": "চাবি স্ট্রিম করুন"
},
"My6HwN": {
"defaultMessage": "ঠিক আছে, এটা নিরাপদ"
},
"O2Cy6m": {
"defaultMessage": "হ্যাঁ, আমি ১৮ বছরের উর্ধ্বে"
},
"OEW7yJ": {
"defaultMessage": "জ্যাপস"
},
"OKhRC6": {
"defaultMessage": "শেয়ার করুন"
},
"OWgHbg": {
"defaultMessage": "কার্ড সম্পাদনা করুন"
},
"Oxqtyf": {
"defaultMessage": "আমরা আপনাকে একটি বিজলি ওয়ালেটের ব্যবস্থা করে দিয়েছি যাতে আপনি দর্শকদের কাছ থেকে তৎক্ষণাৎ পারিশ্রমিক নিতে পারেন!"
},
"Q3au2v": {
"defaultMessage": "প্রায় {estimate}"
},
"QRHNuF": {
"defaultMessage": "আজকে আমরা কী স্ট্রিম করছি?"
},
"QRRCp0": {
"defaultMessage": "URL স্ট্রিম করুন"
},
"QceMQZ": {
"defaultMessage": "লক্ষ্য: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} দ্বারা {amount}"
},
"RJOmzk": {
"defaultMessage": "আমি {provider} এর {terms} পড়েছি এবং এর সাথে সহমত প্রকাশ করছি।"
},
"RXQdxR": {
"defaultMessage": "মেসেজ দিতে লগইন করুন!"
},
"RrCui3": {
"defaultMessage": "সারসংক্ষেপ"
},
"TP/cMX": {
"defaultMessage": "শেষ হয়েছে"
},
"TaTRKo": {
"defaultMessage": "স্ট্রিম শুরু করুন"
},
"TwyMau": {
"defaultMessage": "অ্যাকাউন্ট"
},
"UJBFYK": {
"defaultMessage": "কার্ড যুক্ত করুন"
},
"UfSot5": {
"defaultMessage": "বিগত স্ট্রিমগুলি"
},
"VA/Z1S": {
"defaultMessage": "লুকান"
},
"W9355R": {
"defaultMessage": "আনমিউট করুন"
},
"X2PZ7D": {
"defaultMessage": "লক্ষ্য নির্ধারণ করুন"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "এই পদ্ধতিটি নিরাপদ নয়। আমরা একটি {nostrlink} ব্যবহারের পরামর্শ দিচ্ছি।"
},
"ZmqxZs": {
"defaultMessage": "আপনি এটি পরে পরিবর্তন করতে পারবেন"
},
"acrOoz": {
"defaultMessage": "চালিয়ে যান"
},
"cPIKU2": {
"defaultMessage": "অনুসরণ করা হচ্ছে"
},
"cvAsEh": {
"defaultMessage": "{date} তারিখে স্ট্রিম করা হয়েছে"
},
"cyR7Kh": {
"defaultMessage": "পেছান"
},
"d5zWyh": {
"defaultMessage": "কণ্ঠস্বর পরীক্ষা করে দেখুন"
},
"dVD/AR": {
"defaultMessage": "শীর্ষ জ্যাপ প্রদানকারী"
},
"ebmhes": {
"defaultMessage": "নস্টার এক্সটেনশন"
},
"f6biFA": {
"defaultMessage": "ওহ, এবং আমাদের কাছে আপনার {n} স্যাট মূল্যমানের ফ্রি স্ট্রিমিং আছে! 💜"
},
"fBI91o": {
"defaultMessage": "জ্যাপ"
},
"fc2iho": {
"defaultMessage": "ফাইল যুক্ত করুন"
},
"feZ/kG": {
"defaultMessage": "ব্যক্তিগত চাবি দিয়ে লগ ইন করুন (অনিরাপদ)"
},
"hGQqkW": {
"defaultMessage": "সময়সূচী"
},
"heyxZL": {
"defaultMessage": "মূলপাঠ থেকে পড়ার পরিষেবা চালু করুন"
},
"hpl4BP": {
"defaultMessage": "চ্যাট উইজেট"
},
"ieGrWo": {
"defaultMessage": "অনুসরণ করুন"
},
"itPgxd": {
"defaultMessage": "প্রোফাইল"
},
"izWS4J": {
"defaultMessage": "আনফলো করুন"
},
"jr4+vD": {
"defaultMessage": "মার্কডাউন"
},
"jvo0vs": {
"defaultMessage": "সংরক্ষণ করুন"
},
"k21gTS": {
"defaultMessage": "যেমন: আমার সম্পর্কে"
},
"kp0NPF": {
"defaultMessage": "পরিকল্পিত"
},
"lZpRMR": {
"defaultMessage": "এই স্ট্রিমটিতে নগ্নতা বা পর্নোগ্রাফিক আধেয় আছে কিনা তা এখানে পরীক্ষা করুন।"
},
"ljmS5P": {
"defaultMessage": "শেষপ্রান্ত"
},
"mnJYBQ": {
"defaultMessage": "কণ্ঠস্বর"
},
"mtNGwh": {
"defaultMessage": "বিষয়বস্তুর একটি সংক্ষিপ্ত বিবরণ"
},
"nBCvvJ": {
"defaultMessage": "টপআপ"
},
"nOaArs": {
"defaultMessage": "প্রোফাইল সেটআপ করুন"
},
"nwA8Os": {
"defaultMessage": "কার্ড যুক্ত করুন"
},
"oHPB8Q": {
"defaultMessage": "জ্যাপ {name}"
},
"oZrFyI": {
"defaultMessage": "স্ট্রিমের ধরন HLS হওয়া উচিত"
},
"pO/lPX": {
"defaultMessage": "{date} তারিখের জন্য নির্ধারিত"
},
"r2Jjms": {
"defaultMessage": "লগ ইন করুন"
},
"rWBFZA": {
"defaultMessage": "সামনে যৌনতাপূর্ণ উপাদান রয়েছে!"
},
"rbrahO": {
"defaultMessage": "বন্ধ করুন"
},
"rfC1Zq": {
"defaultMessage": "কার্ড সংরক্ষণ করুন"
},
"rgsbu9": {
"defaultMessage": "বর্তমান দর্শক"
},
"s5ksS7": {
"defaultMessage": "ছবির লিংক"
},
"s7V+5p": {
"defaultMessage": "আপনার বয়স নিশ্চিত করুন"
},
"sInm1h": {
"defaultMessage": "জ্যাপ-বার্তা"
},
"tG1ST3": {
"defaultMessage": "আসন্ন জ্যাপ"
},
"tM6fNW": {
"defaultMessage": "দারুণ! চালিয়ে যান.."
},
"thsiMl": {
"defaultMessage": "শর্তাবলী"
},
"tzMNF3": {
"defaultMessage": "স্ট্যাটাস"
},
"u6uD94": {
"defaultMessage": "একটি অ্যাকাউন্ট তৈরি করুন"
},
"uYw2LD": {
"defaultMessage": "স্ট্রিম"
},
"vrTOHJ": {
"defaultMessage": "{amount} পরিমাণ স্যাট"
},
"w0Xm2F": {
"defaultMessage": "লেখা শুরু করুন"
},
"wCIL7o": {
"defaultMessage": "নস্টারে সম্প্রচার করুন"
},
"wEQDC6": {
"defaultMessage": "সম্পাদনা"
},
"wMKVFz": {
"defaultMessage": "কণ্ঠস্বর নির্বাচন করুন..."
},
"wOy57k": {
"defaultMessage": "স্ট্রিমের লক্ষ্য সংযুক্ত করুন"
},
"wzWWzV": {
"defaultMessage": "শীর্ষ জ্যাপ প্রদানকারী"
},
"x82IOl": {
"defaultMessage": "নিঃশব্দ করুন"
},
"y867Vs": {
"defaultMessage": "ভলিউম"
},
"yzKwBQ": {
"defaultMessage": "যেমন: nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "জ্যাপ অ্যালার্ট"
}
}

416
src/translations/ca_ES.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/cs_CZ.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/da_DK.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/de_DE.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Bild"
},
"+AcVD+": {
"defaultMessage": "Keine E-Mails, nur Großartigkeit!"
},
"+vVZ/G": {
"defaultMessage": "Verbinden"
},
"/0TOL5": {
"defaultMessage": "Betrag"
},
"/EvlqN": {
"defaultMessage": "Nostr Signier-Erweiterung"
},
"/GCoTA": {
"defaultMessage": "Löschen"
},
"04lmFi": {
"defaultMessage": "Schlüssel speichern"
},
"0GfNiL": {
"defaultMessage": "Stream-Zap-Ziele"
},
"0VV/sK": {
"defaultMessage": "Ziel"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "z.B. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Hinzufügen"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} Zuschauer"
},
"3df560": {
"defaultMessage": "Mit privatem Schlüssel anmelden"
},
"47FYwb": {
"defaultMessage": "Abbrechen"
},
"4l69eO": {
"defaultMessage": "Hmm, deine Lightning-Adresse sieht falsch aus"
},
"4l6vz1": {
"defaultMessage": "Kopieren"
},
"4uI538": {
"defaultMessage": "Auflösungen"
},
"5JcXdV": {
"defaultMessage": "Konto erstellen"
},
"5QYdPU": {
"defaultMessage": "Startzeit"
},
"5kx+2v": {
"defaultMessage": "Server-URL"
},
"6Z2pvJ": {
"defaultMessage": "Stream-Anbieter"
},
"6pr6hJ": {
"defaultMessage": "Mindestbetrag für Text-to-Speech"
},
"8YT6ja": {
"defaultMessage": "Text zum Sprechen einfügen"
},
"9WRlF4": {
"defaultMessage": "Senden"
},
"9a9+ww": {
"defaultMessage": "Titel"
},
"9anxhq": {
"defaultMessage": "Beginnt"
},
"AIHaPH": {
"defaultMessage": "{person} zappt {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Inhalt"
},
"AukrPM": {
"defaultMessage": "Keine Zuschauer-Daten verfügbar"
},
"AyGauy": {
"defaultMessage": "Anmelden"
},
"BGxpTN": {
"defaultMessage": "Stream-Chat"
},
"Bep/gA": {
"defaultMessage": "Privater Schlüssel"
},
"C81/uG": {
"defaultMessage": "Abmelden"
},
"D3idYv": {
"defaultMessage": "Einstellungen"
},
"DZKuuP": {
"defaultMessage": "Angemeldet als"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Dein Kommentar für {name}"
},
"FjDlus": {
"defaultMessage": "Du kannst es später jederzeit durch deine eigene Adresse ersetzen."
},
"Fodi9+": {
"defaultMessage": "Werde von Zuschauern bezahlt"
},
"G/yZLu": {
"defaultMessage": "Entfernen"
},
"Gq6x9o": {
"defaultMessage": "Titelbild"
},
"H/bNs9": {
"defaultMessage": "Speichere das und bewahre es sicher auf! Wenn du diesen Schlüssel verlierst, kannst du nie mehr auf dein Konto zugreifen. Ja, es ist folgenreich!"
},
"H5+NAX": {
"defaultMessage": "Guthaben"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Ziel auswählen..."
},
"I1kjHI": {
"defaultMessage": "Unterstützt {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap Betrag in {currency}"
},
"INlWvJ": {
"defaultMessage": "ODER"
},
"JEsxDw": {
"defaultMessage": "Hochladen..."
},
"Jq3FDz": {
"defaultMessage": "Inhalt"
},
"K3r6DQ": {
"defaultMessage": "Löschen"
},
"K3uH1C": {
"defaultMessage": "Offline"
},
"K7AkdL": {
"defaultMessage": "Anzeigen"
},
"KkIL3s": {
"defaultMessage": "Nein, ich bin unter 18 Jahre alt"
},
"LknBsU": {
"defaultMessage": "Stream-Schlüssel"
},
"My6HwN": {
"defaultMessage": "Ok, er ist gesichert"
},
"O2Cy6m": {
"defaultMessage": "Ja, ich bin über 18 Jahre alt"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Teilen"
},
"OWgHbg": {
"defaultMessage": "Karte bearbeiten"
},
"Oxqtyf": {
"defaultMessage": "Wir haben dich mit einer Lightning-Wallet ausgestattet, sodass du sofort von Zuschauern bezahlt werden kannst!"
},
"Q3au2v": {
"defaultMessage": "Ungefähr {estimate}"
},
"QRHNuF": {
"defaultMessage": "Was streamen wir heute?"
},
"QRRCp0": {
"defaultMessage": "Stream-URL"
},
"QceMQZ": {
"defaultMessage": "Ziel: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} mit {amount}"
},
"RJOmzk": {
"defaultMessage": "Ich habe die {provider} {terms} gelesen und stimme ihnen zu."
},
"RXQdxR": {
"defaultMessage": "Bitte melde dich an, um Nachrichten zu schreiben!"
},
"RrCui3": {
"defaultMessage": "Zusammenfassung"
},
"TP/cMX": {
"defaultMessage": "Beendet"
},
"TaTRKo": {
"defaultMessage": "Stream starten"
},
"TwyMau": {
"defaultMessage": "Konto"
},
"UJBFYK": {
"defaultMessage": "Karte hinzufügen"
},
"UfSot5": {
"defaultMessage": "Vergangene Streams"
},
"VA/Z1S": {
"defaultMessage": "Verbergen"
},
"W9355R": {
"defaultMessage": "Stummschaltung aufheben"
},
"X2PZ7D": {
"defaultMessage": "Ziel erstellen"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Diese Methode ist unsicher. Wir empfehlen die Verwendung von {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Sie können das später ändern"
},
"acrOoz": {
"defaultMessage": "Weiter"
},
"cPIKU2": {
"defaultMessage": "Folge ich"
},
"cvAsEh": {
"defaultMessage": "Am {date} gestreamt"
},
"cyR7Kh": {
"defaultMessage": "Zurück"
},
"d5zWyh": {
"defaultMessage": "Stimme testen"
},
"dVD/AR": {
"defaultMessage": "Top Zapper"
},
"ebmhes": {
"defaultMessage": "Nostr Erweiterung"
},
"f6biFA": {
"defaultMessage": "Oh, und du hast {n} sats kostenloses Streaming auf uns! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Datei hinzufügen"
},
"feZ/kG": {
"defaultMessage": "Mit privatem Schlüssel anmelden (unsicher)"
},
"hGQqkW": {
"defaultMessage": "Programm"
},
"heyxZL": {
"defaultMessage": "Text-to-Speech aktivieren"
},
"hpl4BP": {
"defaultMessage": "Chat-Widget"
},
"ieGrWo": {
"defaultMessage": "Folgen"
},
"itPgxd": {
"defaultMessage": "Profil"
},
"izWS4J": {
"defaultMessage": "Entfolgen"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Speichern"
},
"k21gTS": {
"defaultMessage": "z.B. über mich"
},
"kp0NPF": {
"defaultMessage": "Geplant"
},
"lZpRMR": {
"defaultMessage": "Hier markieren, wenn dieser Stream Nacktheit oder pornografische Inhalte enthält."
},
"ljmS5P": {
"defaultMessage": "Endpunkt"
},
"mnJYBQ": {
"defaultMessage": "Stimme"
},
"mtNGwh": {
"defaultMessage": "Eine kurze Beschreibung des Inhalts"
},
"nBCvvJ": {
"defaultMessage": "Aufladen"
},
"nOaArs": {
"defaultMessage": "Profil einrichten"
},
"nwA8Os": {
"defaultMessage": "Karte hinzufügen"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream Typ sollte HLS sein"
},
"pO/lPX": {
"defaultMessage": "Geplant am {date}"
},
"r2Jjms": {
"defaultMessage": "Anmelden"
},
"rWBFZA": {
"defaultMessage": "Sexuell explizites Material voraus!"
},
"rbrahO": {
"defaultMessage": "Schließen"
},
"rfC1Zq": {
"defaultMessage": "Karte speichern"
},
"rgsbu9": {
"defaultMessage": "Aktuelle Zuschauer"
},
"s5ksS7": {
"defaultMessage": "Bild-Link"
},
"s7V+5p": {
"defaultMessage": "Bestätige dein Alter"
},
"sInm1h": {
"defaultMessage": "Zap-Nachricht"
},
"tG1ST3": {
"defaultMessage": "Eingehender Zap"
},
"tM6fNW": {
"defaultMessage": "Großartig! Fahre fort..."
},
"thsiMl": {
"defaultMessage": "Allgemeinen Geschäftsbedingungen"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Konto erstellen"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Beginne zu tippen"
},
"wCIL7o": {
"defaultMessage": "Auf Nostr senden"
},
"wEQDC6": {
"defaultMessage": "Bearbeiten"
},
"wMKVFz": {
"defaultMessage": "Stimme auswählen..."
},
"wOy57k": {
"defaultMessage": "Stream-Ziel hinzufügen"
},
"wzWWzV": {
"defaultMessage": "Top Zapper"
},
"x82IOl": {
"defaultMessage": "Stummschalten"
},
"y867Vs": {
"defaultMessage": "Lautstärke"
},
"yzKwBQ": {
"defaultMessage": "z.B. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/el_GR.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

View File

@ -1,76 +1,111 @@
{
"+0zv6g": "Image",
"+AcVD+": "No emails, just awesomeness!",
"+vVZ/G": "Connect",
"/0TOL5": "Amount",
"/EvlqN": "nostr signer extension",
"/GCoTA": "Clear",
"04lmFi": "Save Key",
"0GfNiL": "Stream Zap Goals",
"0VV/sK": "Goal",
"1EYCdR": "Tags",
"1qsXCO": "eg. name@wallet.com",
"2/2yg+": "Add",
"2CGh/0": "live",
"3HwrQo": "Zap!",
"3adEeb": "{n} viewers",
"3df560": "Login with private key",
"47FYwb": "Cancel",
"4l69eO": "Hmm, your lightning address looks wrong",
"4l6vz1": "Copy",
"4uI538": "Resolutions",
"5JcXdV": "Create Account",
"5QYdPU": "Start Time",
"5kx+2v": "Server Url",
"6Z2pvJ": "Stream Providers",
"6pr6hJ": "Minimum amount for text to speech",
"8YT6ja": "Insert text to speak",
"9WRlF4": "Send",
"9a9+ww": "Title",
"9anxhq": "Starts",
"AIHaPH": "{person} zapped {amount} sats",
"Atr2p4": "NSFW Content",
"AukrPM": "No viewer data available",
"AyGauy": "Login",
"BGxpTN": "Stream Chat",
"Bep/gA": "Private key",
"C81/uG": "Logout",
"D3idYv": "Settings",
"DZKuuP": "Logged in as",
"Dn82AL": "Live",
"ESyhzp": "Your comment for {name}",
"FjDlus": "You can always replace it with your own address later.",
"Fodi9+": "Get paid by viewers",
"G/yZLu": "Remove",
"Gq6x9o": "Cover Image",
"H/bNs9": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!",
"H5+NAX": "Balance",
"HAlOn1": "Name",
"I/TubD": "Select a goal...",
"I1kjHI": "Supports {markdown}",
"IJDKz3": "Zap amount in {currency}",
"INlWvJ": "OR",
"JEsxDw": "Uploading...",
"Jq3FDz": "Content",
"K3r6DQ": "Delete",
"K3uH1C": "offline",
"K7AkdL": "Show",
"KkIL3s": "No, I am under 18",
"Ld5LAE": "Nostr uses private keys, please save yours, if you lose this key you wont be able to login to your account anymore!",
"LknBsU": "Stream Key",
"My6HwN": "Ok, it's safe",
"O2Cy6m": "Yes, I am over 18",
"OEW7yJ": "Zaps",
"OKhRC6": "Share",
"OWgHbg": "Edit card",
"Oxqtyf": "We hooked you up with a lightning wallet so you can get paid by viewers right away!",
"Q3au2v": "About {estimate}",
"QRHNuF": "What are we steaming today?",
"QRRCp0": "Stream URL",
"QceMQZ": "Goal: {amount}",
"Qe1MJu": "{name} with {amount}",
"RJOmzk": "I have read and agree with {provider}''s {terms}.",
"RXQdxR": "Please login to write messages!",
"RrCui3": "Summary",
"TP/cMX": "Ended",
"TaTRKo": "Start Stream",
"TwyMau": "Account",
"UJBFYK": "Add Card",
"UfSot5": "Past Streams",
"VA/Z1S": "Hide",
"W9355R": "Unmute",
"X2PZ7D": "Create Goal",
"YPh5Nq": "@ {rate}",
"Z8ZOEY": "This method is insecure. We recommend using a {nostrlink}",
"ZmqxZs": "You can change this later",
"acrOoz": "Continue",
"cPIKU2": "Following",
"cvAsEh": "Streamed on {date}",
"cyR7Kh": "Back",
"d5zWyh": "Test voice",
"dVD/AR": "Top Zappers",
"ebmhes": "Nostr Extension",
"f6biFA": "Oh, and you have {n} sats of free streaming on us! 💜",
"fBI91o": "Zap",
"fc2iho": "Add File",
"feZ/kG": "Login with Private Key (insecure)",
"hGQqkW": "Schedule",
"heyxZL": "Enable text to speech",
"hpl4BP": "Chat Widget",
"ieGrWo": "Follow",
"itPgxd": "Profile",
"izWS4J": "Unfollow",
"jr4+vD": "Markdown",
"jvo0vs": "Save",
"k21gTS": "e.g. about me",
"kp0NPF": "Planned",
"lZpRMR": "Check here if this stream contains nudity or pornographic content.",
"ljmS5P": "Endpoint",
"mnJYBQ": "Voice",
"mtNGwh": "A short description of the content",
"nBCvvJ": "Topup",
"nOaArs": "Setup Profile",
@ -78,18 +113,29 @@
"oHPB8Q": "Zap {name}",
"oZrFyI": "Stream type should be HLS",
"pO/lPX": "Scheduled for {date}",
"r2Jjms": "Log In",
"rWBFZA": "Sexually explicit material ahead!",
"rbrahO": "Close",
"rfC1Zq": "Save card",
"rgsbu9": "Current Viewers",
"s5ksS7": "Image Link",
"s7V+5p": "Confirm your age",
"sInm1h": "Zap message",
"tG1ST3": "Incoming Zap",
"tM6fNW": "Amazing! Continue..",
"thsiMl": "terms and conditions",
"tzMNF3": "Status",
"u6uD94": "Create an Account",
"uYw2LD": "Stream",
"vrTOHJ": "{amount} sats",
"w0Xm2F": "Start typing",
"wCIL7o": "Broadcast on Nostr",
"wEQDC6": "Edit",
"wMKVFz": "Select voice...",
"wOy57k": "Add stream goal",
"wzWWzV": "Top zappers",
"x82IOl": "Mute"
}
"x82IOl": "Mute",
"y867Vs": "Volume",
"yzKwBQ": "eg. nsec1xyz",
"zVDHAu": "Zap Alert"
}

421
src/translations/es_ES.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Imagen"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Conectar"
},
"/0TOL5": {
"defaultMessage": "Cantidad"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Restablecer"
},
"04lmFi": {
"defaultMessage": "Guardar clave"
},
"0GfNiL": {
"defaultMessage": "Zaps objetivos de la transmisión"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Etiquetas"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Agregar"
},
"2CGh/0": {
"defaultMessage": "en vivo"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} espectadores"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancelar"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copiar"
},
"4uI538": {
"defaultMessage": "Resoluciones"
},
"5JcXdV": {
"defaultMessage": "Crear una cuenta"
},
"5QYdPU": {
"defaultMessage": "Hora de inicio"
},
"5kx+2v": {
"defaultMessage": "Url del servidor"
},
"6Z2pvJ": {
"defaultMessage": "Proveedores de transmisión"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Enviar"
},
"9a9+ww": {
"defaultMessage": "Título"
},
"9anxhq": {
"defaultMessage": "Empieza"
},
"AIHaPH": {
"defaultMessage": "{person} zapearon {amount} sats"
},
"Atr2p4": {
"defaultMessage": "Contenido NSFW -No Apto Para el Trabajo-"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Iniciar Sesión"
},
"BGxpTN": {
"defaultMessage": "Chat de la transmisión"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Cerrar sesión"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "En directo"
},
"ESyhzp": {
"defaultMessage": "Tu comentario para {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Eliminar"
},
"Gq6x9o": {
"defaultMessage": "Imagen de portada"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Nombre"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Soporta {markdown}"
},
"IJDKz3": {
"defaultMessage": "Monto del zap en {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Subiendo..."
},
"Jq3FDz": {
"defaultMessage": "Contenido"
},
"K3r6DQ": {
"defaultMessage": "Eliminar"
},
"K3uH1C": {
"defaultMessage": "sin conexión"
},
"K7AkdL": {
"defaultMessage": "Mostrar"
},
"KkIL3s": {
"defaultMessage": "No, soy menor de 18 años"
},
"LknBsU": {
"defaultMessage": "Clave de transmisión"
},
"My6HwN": {
"defaultMessage": "Ok, es seguro"
},
"O2Cy6m": {
"defaultMessage": "Sí, tengo más de 18 años"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Compartir"
},
"OWgHbg": {
"defaultMessage": "Editar tarjeta"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "Alrededor de {estimate}"
},
"QRHNuF": {
"defaultMessage": "¿Qué estamos transmitiendo hoy?"
},
"QRRCp0": {
"defaultMessage": "Url de la transmisión"
},
"QceMQZ": {
"defaultMessage": "Objetivo: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} con {amount}"
},
"RJOmzk": {
"defaultMessage": "He leído y estoy de acuerdo con los {terms} del {provider}."
},
"RXQdxR": {
"defaultMessage": "¡Por favor, inicia sesión para escribir mensajes!"
},
"RrCui3": {
"defaultMessage": "Resumen"
},
"TP/cMX": {
"defaultMessage": "Finalizado"
},
"TaTRKo": {
"defaultMessage": "Iniciar transmisión"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Agregar una tarjeta"
},
"UfSot5": {
"defaultMessage": "Transmisiones anteriores"
},
"VA/Z1S": {
"defaultMessage": "Ocultar"
},
"W9355R": {
"defaultMessage": "Dejar de silenciar"
},
"X2PZ7D": {
"defaultMessage": "Crear objetivo"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Podrás cambiar esto más tarde"
},
"acrOoz": {
"defaultMessage": "Continuar"
},
"cPIKU2": {
"defaultMessage": "Siguiendo"
},
"cvAsEh": {
"defaultMessage": "Transmitido el {date}"
},
"cyR7Kh": {
"defaultMessage": "Volver"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Mejores Zapeadores"
},
"ebmhes": {
"defaultMessage": "Extensión Nostr"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Añadir archivo"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Programar"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Widget de Chat"
},
"ieGrWo": {
"defaultMessage": "Seguir"
},
"itPgxd": {
"defaultMessage": "Perfil"
},
"izWS4J": {
"defaultMessage": "Dejar de seguir"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Guardar"
},
"k21gTS": {
"defaultMessage": "ej. acerca de mí"
},
"kp0NPF": {
"defaultMessage": "Planificado"
},
"lZpRMR": {
"defaultMessage": "Marque aquí si esta transmisión contiene escenas de desnudez o pornografía."
},
"ljmS5P": {
"defaultMessage": "Extremo"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "Breve descripción del contenido"
},
"nBCvvJ": {
"defaultMessage": "Recargar"
},
"nOaArs": {
"defaultMessage": "Configurar el perfil"
},
"nwA8Os": {
"defaultMessage": "Agregar tarjeta"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "El tipo de la transmisión debe ser HLS"
},
"pO/lPX": {
"defaultMessage": "Programada para el {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "¡Material sexualmente explícito por delante!"
},
"rbrahO": {
"defaultMessage": "Cerrar"
},
"rfC1Zq": {
"defaultMessage": "Guardar tarjeta"
},
"rgsbu9": {
"defaultMessage": "Espectadores Actuales"
},
"s5ksS7": {
"defaultMessage": "Enlace de la Imagen"
},
"s7V+5p": {
"defaultMessage": "Confirma tu edad"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Zap entrante"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "términos y condiciones"
},
"tzMNF3": {
"defaultMessage": "Estado"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Transmisión"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Empieza a escribir"
},
"wCIL7o": {
"defaultMessage": "Transmitir en Nostr"
},
"wEQDC6": {
"defaultMessage": "Editar"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Añadir objetivo de directo"
},
"wzWWzV": {
"defaultMessage": "Mejores Zapeadores"
},
"x82IOl": {
"defaultMessage": "Silenciar"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Alerta de Zap"
}
}

421
src/translations/fa_IR.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "تصویر"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "اتصال"
},
"/0TOL5": {
"defaultMessage": "مبلغ"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "پاک کردن"
},
"04lmFi": {
"defaultMessage": "ذخیره کلید"
},
"0GfNiL": {
"defaultMessage": "اهداف زپ این پخش"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "برچسب‌ها"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "افزودن"
},
"2CGh/0": {
"defaultMessage": "زنده"
},
"3HwrQo": {
"defaultMessage": "زَپ!"
},
"3adEeb": {
"defaultMessage": "{n} بیننده"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "لغو"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "کپی"
},
"4uI538": {
"defaultMessage": "وضوح"
},
"5JcXdV": {
"defaultMessage": "ساخت حساب کاربری"
},
"5QYdPU": {
"defaultMessage": "زمان شروع"
},
"5kx+2v": {
"defaultMessage": "آدرس سرور"
},
"6Z2pvJ": {
"defaultMessage": "ارائه دهندگان پخش زنده"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "ارسال"
},
"9a9+ww": {
"defaultMessage": "عنوان"
},
"9anxhq": {
"defaultMessage": "آغاز"
},
"AIHaPH": {
"defaultMessage": "{person} {amount} ساتوشی زپ زد"
},
"Atr2p4": {
"defaultMessage": "محتوای نامناسب برای کودکان و محل کار"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "ورود"
},
"BGxpTN": {
"defaultMessage": "گپ پخش زنده"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "خروج"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "زنده"
},
"ESyhzp": {
"defaultMessage": "نظر شما درباره {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "حذف"
},
"Gq6x9o": {
"defaultMessage": "تصویر جلد"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "مانده حساب"
},
"HAlOn1": {
"defaultMessage": "نام"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "از {markdown} پشتیبانی می کند"
},
"IJDKz3": {
"defaultMessage": "مبلغ زپ به {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "در حال بارگذاری..."
},
"Jq3FDz": {
"defaultMessage": "محتوا"
},
"K3r6DQ": {
"defaultMessage": "حذف"
},
"K3uH1C": {
"defaultMessage": "آفلاین"
},
"K7AkdL": {
"defaultMessage": "نمایش"
},
"KkIL3s": {
"defaultMessage": "نه، من زیر ۱۸ سال هستم"
},
"LknBsU": {
"defaultMessage": "کلید پخش زنده"
},
"My6HwN": {
"defaultMessage": "باشه، امن است"
},
"O2Cy6m": {
"defaultMessage": "بله، من بالای ۱۸ سال هستم"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "اشتراک‌گذاری"
},
"OWgHbg": {
"defaultMessage": "ویرایش کارت"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "حدود {estimate}"
},
"QRHNuF": {
"defaultMessage": "امروز چی پخش می کنیم؟"
},
"QRRCp0": {
"defaultMessage": "آدرس پخش زنده"
},
"QceMQZ": {
"defaultMessage": "هدف: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} با {amount}"
},
"RJOmzk": {
"defaultMessage": "من {terms} {provider} را خوانده و با آن موافقم."
},
"RXQdxR": {
"defaultMessage": "لطفا برای نوشتن پیام وارد شوید!"
},
"RrCui3": {
"defaultMessage": "چکیده"
},
"TP/cMX": {
"defaultMessage": "به پایان رسید"
},
"TaTRKo": {
"defaultMessage": "شروع پخش زنده"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "افزودن کارت"
},
"UfSot5": {
"defaultMessage": "پخش های گذشته"
},
"VA/Z1S": {
"defaultMessage": "پنهان کردن"
},
"W9355R": {
"defaultMessage": "صداردار کردن"
},
"X2PZ7D": {
"defaultMessage": "ایجاد هدف"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "بعدا می توانید این را تغییر دهید"
},
"acrOoz": {
"defaultMessage": "ادامه"
},
"cPIKU2": {
"defaultMessage": "بعدی"
},
"cvAsEh": {
"defaultMessage": "در تاریخ {date} پخش شده"
},
"cyR7Kh": {
"defaultMessage": "بازگشت"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "بزرگترین زپ ها"
},
"ebmhes": {
"defaultMessage": "افزونه ناستر"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "زَپ"
},
"fc2iho": {
"defaultMessage": "افزودن فایل"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "زمان‌بندی"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "ویجت گپ"
},
"ieGrWo": {
"defaultMessage": "دنبال کردن"
},
"itPgxd": {
"defaultMessage": "نمایه"
},
"izWS4J": {
"defaultMessage": "لغو دنبال کردن"
},
"jr4+vD": {
"defaultMessage": "مارک‌داون"
},
"jvo0vs": {
"defaultMessage": "ذخیره"
},
"k21gTS": {
"defaultMessage": "مثلا درباره من"
},
"kp0NPF": {
"defaultMessage": "برنامه ریزی شده"
},
"lZpRMR": {
"defaultMessage": "اگر این پخش شامل عریانی یا پورن است اینجا را ببینید."
},
"ljmS5P": {
"defaultMessage": "نقطه انتها"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "شرح مختصری از محتوا"
},
"nBCvvJ": {
"defaultMessage": "شارژ کردن"
},
"nOaArs": {
"defaultMessage": "تنظیم نمایه"
},
"nwA8Os": {
"defaultMessage": "افزودن کارت"
},
"oHPB8Q": {
"defaultMessage": "زپ کردن {name}"
},
"oZrFyI": {
"defaultMessage": "نوع پخش باید HLS باشد"
},
"pO/lPX": {
"defaultMessage": "زمان‌بندی شده برای {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "محتوای نمایان جنسی در پیش است!"
},
"rbrahO": {
"defaultMessage": "بستن"
},
"rfC1Zq": {
"defaultMessage": "ذخیره کارت"
},
"rgsbu9": {
"defaultMessage": "بیننندگان فعلی"
},
"s5ksS7": {
"defaultMessage": "لینک تصویر"
},
"s7V+5p": {
"defaultMessage": "سن خود را تایید کنید"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "زپ ورودی"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "شرایط و ضوابط"
},
"tzMNF3": {
"defaultMessage": "وضعیت"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "پخش زنده"
},
"vrTOHJ": {
"defaultMessage": "{amount} ساتوشی"
},
"w0Xm2F": {
"defaultMessage": "بنویسید"
},
"wCIL7o": {
"defaultMessage": "پخش در ناستر"
},
"wEQDC6": {
"defaultMessage": "ویرایش"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "افزودن هدف زپ پخش زنده"
},
"wzWWzV": {
"defaultMessage": "بزرگترین زپ ها"
},
"x82IOl": {
"defaultMessage": "بيصدا"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "هشدار زپ"
}
}

421
src/translations/fi_FI.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Kuva"
},
"+AcVD+": {
"defaultMessage": "Ei sähköposteja, pelkästään mahtavuutta!"
},
"+vVZ/G": {
"defaultMessage": "Yhdistä"
},
"/0TOL5": {
"defaultMessage": "Määrä"
},
"/EvlqN": {
"defaultMessage": "nostr-allekirjoituslaajennus"
},
"/GCoTA": {
"defaultMessage": "Tyhjennä"
},
"04lmFi": {
"defaultMessage": "Tallenna avain"
},
"0GfNiL": {
"defaultMessage": "Streamaa Zap-tavoitteet"
},
"0VV/sK": {
"defaultMessage": "Tavoite"
},
"1EYCdR": {
"defaultMessage": "Tunnisteet"
},
"1qsXCO": {
"defaultMessage": "esim. nimi@lompakko.com"
},
"2/2yg+": {
"defaultMessage": "Lisää"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} katsojaa"
},
"3df560": {
"defaultMessage": "Kirjaudu sisään yksityisellä avaimella"
},
"47FYwb": {
"defaultMessage": "Peruuta"
},
"4l69eO": {
"defaultMessage": "Hmm, lightning-oitteesi näyttää väärältä"
},
"4l6vz1": {
"defaultMessage": "Kopioi"
},
"4uI538": {
"defaultMessage": "Tarkkuudet"
},
"5JcXdV": {
"defaultMessage": "Luo tili"
},
"5QYdPU": {
"defaultMessage": "Aloitusaika"
},
"5kx+2v": {
"defaultMessage": "Palvelimen URL"
},
"6Z2pvJ": {
"defaultMessage": "Streamaustarjoajat"
},
"6pr6hJ": {
"defaultMessage": "Vähimmäismäärä teksti puheelle"
},
"8YT6ja": {
"defaultMessage": "Lisää teksti puheeksi"
},
"9WRlF4": {
"defaultMessage": "Lähetä"
},
"9a9+ww": {
"defaultMessage": "Otsikko"
},
"9anxhq": {
"defaultMessage": "Alkaa"
},
"AIHaPH": {
"defaultMessage": "{person} zappasi {amount} satsia"
},
"Atr2p4": {
"defaultMessage": "NSFW-sisältöä"
},
"AukrPM": {
"defaultMessage": "Katsojatietoja ei ole saatavilla"
},
"AyGauy": {
"defaultMessage": "Kirjaudu sisään"
},
"BGxpTN": {
"defaultMessage": "Stream-keskustelu"
},
"Bep/gA": {
"defaultMessage": "Yksityinen avain"
},
"C81/uG": {
"defaultMessage": "Kirjaudu ulos"
},
"D3idYv": {
"defaultMessage": "Asetukset"
},
"DZKuuP": {
"defaultMessage": "Kirjautuneena nimellä"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Kommenttisi kohteelle {name}"
},
"FjDlus": {
"defaultMessage": "Voit aina vaihtaa sen omaksi osoitteeksesi myöhemmin."
},
"Fodi9+": {
"defaultMessage": "Saa maksuja katsojilta"
},
"G/yZLu": {
"defaultMessage": "Poista"
},
"Gq6x9o": {
"defaultMessage": "Kansikuva"
},
"H/bNs9": {
"defaultMessage": "Tallenna tämä ja pidä se tallessa! Jos menetät tämän avaimen, et pääse koskaan enää tilillesi. Kyllä, se on niin vakavaa!"
},
"H5+NAX": {
"defaultMessage": "Saldo"
},
"HAlOn1": {
"defaultMessage": "Nimi"
},
"I/TubD": {
"defaultMessage": "Valitse tavoite..."
},
"I1kjHI": {
"defaultMessage": "Tukee {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap-määrä valuuttassa {currency}"
},
"INlWvJ": {
"defaultMessage": "TAI"
},
"JEsxDw": {
"defaultMessage": "Ladataan..."
},
"Jq3FDz": {
"defaultMessage": "Sisältö"
},
"K3r6DQ": {
"defaultMessage": "Poista"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Näytä"
},
"KkIL3s": {
"defaultMessage": "Ei, olen alle 18"
},
"LknBsU": {
"defaultMessage": "Streamin avain"
},
"My6HwN": {
"defaultMessage": "Ok, se on turvassa"
},
"O2Cy6m": {
"defaultMessage": "Kyllä, olen yli 18"
},
"OEW7yJ": {
"defaultMessage": "Zapit"
},
"OKhRC6": {
"defaultMessage": "Jaa"
},
"OWgHbg": {
"defaultMessage": "Muokkaa korttia"
},
"Oxqtyf": {
"defaultMessage": "Sait lightning-lompakon, jotta voit saada heti maksuja katsojilta!"
},
"Q3au2v": {
"defaultMessage": "Tietoja {estimate}"
},
"QRHNuF": {
"defaultMessage": "Mitä me tänään lähetetään?"
},
"QRRCp0": {
"defaultMessage": "Streamin URL"
},
"QceMQZ": {
"defaultMessage": "Tavoite: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} määrällä {amount}"
},
"RJOmzk": {
"defaultMessage": "Olen lukenut ja hyväksynyt {provider}:n {terms}."
},
"RXQdxR": {
"defaultMessage": "Kirjaudu sisään kirjoittaaksesi viestejä!"
},
"RrCui3": {
"defaultMessage": "Yhteenveto"
},
"TP/cMX": {
"defaultMessage": "Päättynyt"
},
"TaTRKo": {
"defaultMessage": "Aloita lähetys"
},
"TwyMau": {
"defaultMessage": "Tili"
},
"UJBFYK": {
"defaultMessage": "Lisää kortti"
},
"UfSot5": {
"defaultMessage": "Aikaisemmat lähetykset"
},
"VA/Z1S": {
"defaultMessage": "Piilota"
},
"W9355R": {
"defaultMessage": "Poista mykistys"
},
"X2PZ7D": {
"defaultMessage": "Luo tavoite"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Tämä menetelmä ei ole turvallinen. Suosittelemme käyttämään {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Voit muuttaa tätä myöhemmin"
},
"acrOoz": {
"defaultMessage": "Jatka"
},
"cPIKU2": {
"defaultMessage": "Seuraa"
},
"cvAsEh": {
"defaultMessage": "Lähetetty {date}"
},
"cyR7Kh": {
"defaultMessage": "Takaisin"
},
"d5zWyh": {
"defaultMessage": "Testiääni"
},
"dVD/AR": {
"defaultMessage": "Parhaat Zapparit"
},
"ebmhes": {
"defaultMessage": "Nostr-laajennus"
},
"f6biFA": {
"defaultMessage": "Ai niin, ja sinulla on {n} satsia ilmaista lähetystä meiltä! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Lisää tiedosto"
},
"feZ/kG": {
"defaultMessage": "Kirjaudu sisään yksityisellä avaimella (turvaton)"
},
"hGQqkW": {
"defaultMessage": "Aikataulu"
},
"heyxZL": {
"defaultMessage": "Käytä tekstiä puheeksi"
},
"hpl4BP": {
"defaultMessage": "Keskusteluwidgetti"
},
"ieGrWo": {
"defaultMessage": "Seuraa"
},
"itPgxd": {
"defaultMessage": "Profiili"
},
"izWS4J": {
"defaultMessage": "Älä seuraa"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Tallenna"
},
"k21gTS": {
"defaultMessage": "esim. itsestäni"
},
"kp0NPF": {
"defaultMessage": "Suunniteltu"
},
"lZpRMR": {
"defaultMessage": "Ruksita tämä, jos lähetys sisältää alastomuutta tai pornografiaa."
},
"ljmS5P": {
"defaultMessage": "Loppupiste"
},
"mnJYBQ": {
"defaultMessage": "Ääni"
},
"mtNGwh": {
"defaultMessage": "Lyhyt kuvaus sisällöstä"
},
"nBCvvJ": {
"defaultMessage": "Lataa saldoa"
},
"nOaArs": {
"defaultMessage": "Aseta profiili"
},
"nwA8Os": {
"defaultMessage": "Lisää kortti"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Streamin tyyppi tulisi olla HLS"
},
"pO/lPX": {
"defaultMessage": "Ajoitettu {date}"
},
"r2Jjms": {
"defaultMessage": "Kirjaudu sisään"
},
"rWBFZA": {
"defaultMessage": "Seksuaalisesti paljastavaa materiaalia tulossa!"
},
"rbrahO": {
"defaultMessage": "Sulje"
},
"rfC1Zq": {
"defaultMessage": "Tallenna kortti"
},
"rgsbu9": {
"defaultMessage": "Nykyiset katsojat"
},
"s5ksS7": {
"defaultMessage": "Kuvan linkki"
},
"s7V+5p": {
"defaultMessage": "Vahvista ikäsi"
},
"sInm1h": {
"defaultMessage": "Zap-viesti"
},
"tG1ST3": {
"defaultMessage": "Saapuva Zap"
},
"tM6fNW": {
"defaultMessage": "Mahtavaa! Jatka.."
},
"thsiMl": {
"defaultMessage": "käyttöehdot"
},
"tzMNF3": {
"defaultMessage": "Tila"
},
"u6uD94": {
"defaultMessage": "Luo tili"
},
"uYw2LD": {
"defaultMessage": "Streamaa"
},
"vrTOHJ": {
"defaultMessage": "{amount} satsia"
},
"w0Xm2F": {
"defaultMessage": "Aloita kirjoittaminen"
},
"wCIL7o": {
"defaultMessage": "Lähetä Nostrissa"
},
"wEQDC6": {
"defaultMessage": "Muokkaa"
},
"wMKVFz": {
"defaultMessage": "Valitse ääni..."
},
"wOy57k": {
"defaultMessage": "Lisää stream-tavoite"
},
"wzWWzV": {
"defaultMessage": "Parhaat Zapparit"
},
"x82IOl": {
"defaultMessage": "Mykistä"
},
"y867Vs": {
"defaultMessage": "Äänenvoimakkuus"
},
"yzKwBQ": {
"defaultMessage": "esim. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap-hälytys"
}
}

421
src/translations/fr_FR.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "Pas d'e-mails, juste génial!"
},
"+vVZ/G": {
"defaultMessage": "Se connecter"
},
"/0TOL5": {
"defaultMessage": "Montant"
},
"/EvlqN": {
"defaultMessage": "Extension nostr signataire"
},
"/GCoTA": {
"defaultMessage": "Effacer"
},
"04lmFi": {
"defaultMessage": "Enregistrer la clé"
},
"0GfNiL": {
"defaultMessage": "Objectifs de Zap du Stream"
},
"0VV/sK": {
"defaultMessage": "Objectif"
},
"1EYCdR": {
"defaultMessage": "Mots-clés"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Ajouter"
},
"2CGh/0": {
"defaultMessage": "en direct"
},
"3HwrQo": {
"defaultMessage": "Zap !"
},
"3adEeb": {
"defaultMessage": "{n} spectateurs"
},
"3df560": {
"defaultMessage": "Se connecter avec une clé privée"
},
"47FYwb": {
"defaultMessage": "Annuler"
},
"4l69eO": {
"defaultMessage": "Hmm, votre adresse lightning semble incorrecte"
},
"4l6vz1": {
"defaultMessage": "Copier"
},
"4uI538": {
"defaultMessage": "Résolutions"
},
"5JcXdV": {
"defaultMessage": "Créer un Compte"
},
"5QYdPU": {
"defaultMessage": "Heure de Début"
},
"5kx+2v": {
"defaultMessage": "Url du serveur"
},
"6Z2pvJ": {
"defaultMessage": "Fournisseurs de Stream"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Envoyer"
},
"9a9+ww": {
"defaultMessage": "Titre"
},
"9anxhq": {
"defaultMessage": "Débute"
},
"AIHaPH": {
"defaultMessage": "{person} a zappé {amount} sats"
},
"Atr2p4": {
"defaultMessage": "Contenu NSFW"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Se Connecter"
},
"BGxpTN": {
"defaultMessage": "Chat du Stream"
},
"Bep/gA": {
"defaultMessage": "Clé privée"
},
"C81/uG": {
"defaultMessage": "Se déconnecter"
},
"D3idYv": {
"defaultMessage": "Paramètres"
},
"DZKuuP": {
"defaultMessage": "Connecté en tant que"
},
"Dn82AL": {
"defaultMessage": "En direct"
},
"ESyhzp": {
"defaultMessage": "Votre commentaire pour {name}"
},
"FjDlus": {
"defaultMessage": "Vous pourrez toujours le remplacer par votre propre adresse plus tard."
},
"Fodi9+": {
"defaultMessage": "Soyez payé par les spectateurs"
},
"G/yZLu": {
"defaultMessage": "Retirer"
},
"Gq6x9o": {
"defaultMessage": "Bannière"
},
"H/bNs9": {
"defaultMessage": "Sauvegardez ceci et gardez-le en sécurité ! Si vous perdez cette clé, vous ne pourrez plus accéder à votre compte. Oui, c'est si grave !"
},
"H5+NAX": {
"defaultMessage": "Solde"
},
"HAlOn1": {
"defaultMessage": "Nom"
},
"I/TubD": {
"defaultMessage": "Sélectionnez un objectif..."
},
"I1kjHI": {
"defaultMessage": "Supporte {markdown}"
},
"IJDKz3": {
"defaultMessage": "Montant du Zap en {currency}"
},
"INlWvJ": {
"defaultMessage": "OU"
},
"JEsxDw": {
"defaultMessage": "Envoi..."
},
"Jq3FDz": {
"defaultMessage": "Contenu"
},
"K3r6DQ": {
"defaultMessage": "Supprimer"
},
"K3uH1C": {
"defaultMessage": "hors ligne"
},
"K7AkdL": {
"defaultMessage": "Montrer"
},
"KkIL3s": {
"defaultMessage": "Non, j'ai moins de 18 ans"
},
"LknBsU": {
"defaultMessage": "Clé de stream"
},
"My6HwN": {
"defaultMessage": "Ok, c'est sûr"
},
"O2Cy6m": {
"defaultMessage": "Oui, j'ai plus de 18 ans"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Partager"
},
"OWgHbg": {
"defaultMessage": "Modifier la carte"
},
"Oxqtyf": {
"defaultMessage": "Nous vous avons branché avec un portefeuille Lightning afin que vous puissiez être payé par les spectateurs dès maintenant!"
},
"Q3au2v": {
"defaultMessage": "À propos de {estimate}"
},
"QRHNuF": {
"defaultMessage": "Qu'allons-nous streamer aujourd'hui ?"
},
"QRRCp0": {
"defaultMessage": "URL du flux"
},
"QceMQZ": {
"defaultMessage": "Objectif : {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} avec {amount}"
},
"RJOmzk": {
"defaultMessage": "J'ai lu et j'accepte les {terms} de {provider}."
},
"RXQdxR": {
"defaultMessage": "Veuillez vous connecter pour écrire des messages !"
},
"RrCui3": {
"defaultMessage": "Résumé"
},
"TP/cMX": {
"defaultMessage": "Terminé"
},
"TaTRKo": {
"defaultMessage": "Commencer la Diffusion"
},
"TwyMau": {
"defaultMessage": "Compte"
},
"UJBFYK": {
"defaultMessage": "Ajouter Carte"
},
"UfSot5": {
"defaultMessage": "Streams passés"
},
"VA/Z1S": {
"defaultMessage": "Cacher"
},
"W9355R": {
"defaultMessage": "Retirer sourdine"
},
"X2PZ7D": {
"defaultMessage": "Créer un objectif"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Cette méthode n'est pas sécurisée. Nous vous recommandons d'utiliser un {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Vous pourrez modifier cela ultérieurement"
},
"acrOoz": {
"defaultMessage": "Continuer"
},
"cPIKU2": {
"defaultMessage": "Abonnements"
},
"cvAsEh": {
"defaultMessage": "Diffusé le {date}"
},
"cyR7Kh": {
"defaultMessage": "Retour"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappeurs"
},
"ebmhes": {
"defaultMessage": "Extension Nostr"
},
"f6biFA": {
"defaultMessage": "Oh, et vous avez des sats {n} de streaming gratuit que nous vous offrons ! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Ajouter un Fichier"
},
"feZ/kG": {
"defaultMessage": "Se connecter avec une Clé Privée (non sécurisé)"
},
"hGQqkW": {
"defaultMessage": "Planning"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Widget Chat"
},
"ieGrWo": {
"defaultMessage": "Suivre"
},
"itPgxd": {
"defaultMessage": "Profil"
},
"izWS4J": {
"defaultMessage": "Ne plus suivre"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Sauvegarder"
},
"k21gTS": {
"defaultMessage": "par ex. à propos de moi"
},
"kp0NPF": {
"defaultMessage": "Planifié"
},
"lZpRMR": {
"defaultMessage": "Vérifiez ici si ce flux contient de la nudité ou du contenu pornographique."
},
"ljmS5P": {
"defaultMessage": "Point darrivée"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "Une courte description du contenu"
},
"nBCvvJ": {
"defaultMessage": "Recharger"
},
"nOaArs": {
"defaultMessage": "Configurer le profil"
},
"nwA8Os": {
"defaultMessage": "Ajouter carte"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Le type de stream doit être HLS"
},
"pO/lPX": {
"defaultMessage": "Prévu pour le {date}"
},
"r2Jjms": {
"defaultMessage": "Se connecter"
},
"rWBFZA": {
"defaultMessage": "Matériel sexuellement explicite à venir !"
},
"rbrahO": {
"defaultMessage": "Fermer"
},
"rfC1Zq": {
"defaultMessage": "Enregistrez la carte"
},
"rgsbu9": {
"defaultMessage": "Spectateurs actuels"
},
"s5ksS7": {
"defaultMessage": "Lien de l'image"
},
"s7V+5p": {
"defaultMessage": "Confirmez votre âge"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Zap entrant"
},
"tM6fNW": {
"defaultMessage": "Incroyable! Continuez.."
},
"thsiMl": {
"defaultMessage": "termes et conditions"
},
"tzMNF3": {
"defaultMessage": "Statut"
},
"u6uD94": {
"defaultMessage": "Créer un Compte"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Commencer à écrire"
},
"wCIL7o": {
"defaultMessage": "Diffuser sur Nostr"
},
"wEQDC6": {
"defaultMessage": "Modifier"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Ajouter un objectif de stream"
},
"wzWWzV": {
"defaultMessage": "Top Zappeurs"
},
"x82IOl": {
"defaultMessage": "Muet"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Alerte Zap"
}
}

416
src/translations/he_IL.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/hu_HU.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Kép"
},
"+AcVD+": {
"defaultMessage": "Nincs szükség E-mailre, csak élvezd!"
},
"+vVZ/G": {
"defaultMessage": "Csatlakozás"
},
"/0TOL5": {
"defaultMessage": "Mennyiség"
},
"/EvlqN": {
"defaultMessage": "nostr signer kiterjesztés"
},
"/GCoTA": {
"defaultMessage": "Töröl"
},
"04lmFi": {
"defaultMessage": "Kulcs Mentése"
},
"0GfNiL": {
"defaultMessage": "Zap-célok streamelése"
},
"0VV/sK": {
"defaultMessage": "Cél"
},
"1EYCdR": {
"defaultMessage": "Címkék"
},
"1qsXCO": {
"defaultMessage": "pl. név@tárca.hu"
},
"2/2yg+": {
"defaultMessage": "Hozzáad"
},
"2CGh/0": {
"defaultMessage": "élő"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} néző"
},
"3df560": {
"defaultMessage": "Bejelentkezés privát kulccsal"
},
"47FYwb": {
"defaultMessage": "Mégse"
},
"4l69eO": {
"defaultMessage": "Hmm, a LN címed rossznak tűnik"
},
"4l6vz1": {
"defaultMessage": "Másolás"
},
"4uI538": {
"defaultMessage": "Felbontások"
},
"5JcXdV": {
"defaultMessage": "Fiók Létrehozása"
},
"5QYdPU": {
"defaultMessage": "Kezdés ideje"
},
"5kx+2v": {
"defaultMessage": "Kiszolgáló URL-címe"
},
"6Z2pvJ": {
"defaultMessage": "Streamszolgáltatók"
},
"6pr6hJ": {
"defaultMessage": "Szövegfelolvasás minimális összege"
},
"8YT6ja": {
"defaultMessage": "Szöveg beszúrása a beszédfelolvasáshoz"
},
"9WRlF4": {
"defaultMessage": "Küldés"
},
"9a9+ww": {
"defaultMessage": "Cím"
},
"9anxhq": {
"defaultMessage": "Kezdés"
},
"AIHaPH": {
"defaultMessage": "{person} zap-elt {amount} sats"
},
"Atr2p4": {
"defaultMessage": "Kifogásolható tartalom"
},
"AukrPM": {
"defaultMessage": "Nézői adatok nem állnak rendelkezésre"
},
"AyGauy": {
"defaultMessage": "Bejelentkezés"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Privát kulcs"
},
"C81/uG": {
"defaultMessage": "Kijelentkezés"
},
"D3idYv": {
"defaultMessage": "Beállítások"
},
"DZKuuP": {
"defaultMessage": "Bejelentkezve mint"
},
"Dn82AL": {
"defaultMessage": "Élő"
},
"ESyhzp": {
"defaultMessage": "Megjegyzésed neki: {name}"
},
"FjDlus": {
"defaultMessage": "Később a saját címedre bármikor lecserélheted."
},
"Fodi9+": {
"defaultMessage": "Nézőktől való bevételszerzés"
},
"G/yZLu": {
"defaultMessage": "Eltávolítás"
},
"Gq6x9o": {
"defaultMessage": "Borítókép"
},
"H/bNs9": {
"defaultMessage": "Mentsd le és őrizd meg! Ha ezt a kulcsot elveszíted, a fiókodhoz soha többé nem fogsz tudni hozzáférni. Igen, ez ennyire komoly!"
},
"H5+NAX": {
"defaultMessage": "Egyenleg"
},
"HAlOn1": {
"defaultMessage": "Név"
},
"I/TubD": {
"defaultMessage": "Tűzz ki egy célt..."
},
"I1kjHI": {
"defaultMessage": "Támogatott {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap értéke {currency}"
},
"INlWvJ": {
"defaultMessage": "VAGY"
},
"JEsxDw": {
"defaultMessage": "Feltöltés..."
},
"Jq3FDz": {
"defaultMessage": "Tartalom"
},
"K3r6DQ": {
"defaultMessage": "Törlés"
},
"K3uH1C": {
"defaultMessage": "nem elérhető"
},
"K7AkdL": {
"defaultMessage": "Megjelenít"
},
"KkIL3s": {
"defaultMessage": "Nem, 18 év alatti vagyok"
},
"LknBsU": {
"defaultMessage": "Stream kulcs"
},
"My6HwN": {
"defaultMessage": "Ok, biztonságos"
},
"O2Cy6m": {
"defaultMessage": "Igen, 18 éves elmúltam"
},
"OEW7yJ": {
"defaultMessage": "Zap-ek"
},
"OKhRC6": {
"defaultMessage": "Megosztás"
},
"OWgHbg": {
"defaultMessage": "Kártya szerkesztése"
},
"Oxqtyf": {
"defaultMessage": "Egy LN tárcával összekötöttünk, hogy a nézők támogatásait azonnal megkaphasd!"
},
"Q3au2v": {
"defaultMessage": "Kb. {estimate}"
},
"QRHNuF": {
"defaultMessage": "Mit streamelünk ma?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Cél: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} ennyivel: {amount}"
},
"RJOmzk": {
"defaultMessage": "Elolvastam és egyetértek a {provider} {terms}."
},
"RXQdxR": {
"defaultMessage": "Üzenetek írásához kérjük jelentkezz be!"
},
"RrCui3": {
"defaultMessage": "Összegzés"
},
"TP/cMX": {
"defaultMessage": "Befejezve"
},
"TaTRKo": {
"defaultMessage": "Stream indítása"
},
"TwyMau": {
"defaultMessage": "Fiók"
},
"UJBFYK": {
"defaultMessage": "Kártya hozzáadása"
},
"UfSot5": {
"defaultMessage": "Múltbeli Streamek"
},
"VA/Z1S": {
"defaultMessage": "Elrejtés"
},
"W9355R": {
"defaultMessage": "Némítás visszavonása"
},
"X2PZ7D": {
"defaultMessage": "Cél kitűzése"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Ez a módszer nem biztonságos. Javasoljuk a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Ezt később megváltoztathatod"
},
"acrOoz": {
"defaultMessage": "Folytatás"
},
"cPIKU2": {
"defaultMessage": "Követek"
},
"cvAsEh": {
"defaultMessage": "{date} közvetítve"
},
"cyR7Kh": {
"defaultMessage": "Vissza"
},
"d5zWyh": {
"defaultMessage": "Hang tesztelése"
},
"dVD/AR": {
"defaultMessage": "Top zapperek"
},
"ebmhes": {
"defaultMessage": "Nostr Kiegészítő"
},
"f6biFA": {
"defaultMessage": "Ó, és neked tőlünk {n} sats ingyenes streaming áll a rendelkezésedre! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Fájl feltöltése"
},
"feZ/kG": {
"defaultMessage": "Bejelentkezés privát kulccsal (nem biztonságos)"
},
"hGQqkW": {
"defaultMessage": "Időzítés"
},
"heyxZL": {
"defaultMessage": "Szövegfelolvasás engedélyezése"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Követem"
},
"itPgxd": {
"defaultMessage": "Profil"
},
"izWS4J": {
"defaultMessage": "Követés visszavonása"
},
"jr4+vD": {
"defaultMessage": "Árleszállítás"
},
"jvo0vs": {
"defaultMessage": "Mentés"
},
"k21gTS": {
"defaultMessage": "pl. rólam"
},
"kp0NPF": {
"defaultMessage": "Tervezett"
},
"lZpRMR": {
"defaultMessage": "Ellenőrizd itt, hogy ez az adatfolyam tartalmaz-e meztelenséget vagy pornográf tartalmat."
},
"ljmS5P": {
"defaultMessage": "Végpont"
},
"mnJYBQ": {
"defaultMessage": "Hang"
},
"mtNGwh": {
"defaultMessage": "A tartalom rövid leírása"
},
"nBCvvJ": {
"defaultMessage": "Feltöltés"
},
"nOaArs": {
"defaultMessage": "Profil Beállítása"
},
"nwA8Os": {
"defaultMessage": "Kártya hozzáadása"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "A stream típusának HLS-nek kell lennie"
},
"pO/lPX": {
"defaultMessage": "Ütemezett: {date}"
},
"r2Jjms": {
"defaultMessage": "Bejelentkezés"
},
"rWBFZA": {
"defaultMessage": "Nyíltan szexuális tartalmú anyagok lesznek!"
},
"rbrahO": {
"defaultMessage": "Bezárás"
},
"rfC1Zq": {
"defaultMessage": "Kártya mentése"
},
"rgsbu9": {
"defaultMessage": "Jelenleg Nézik"
},
"s5ksS7": {
"defaultMessage": "Kép hivatkozása"
},
"s7V+5p": {
"defaultMessage": "Korod megerősítése"
},
"sInm1h": {
"defaultMessage": "Zap üzenet"
},
"tG1ST3": {
"defaultMessage": "Bejövő Zap"
},
"tM6fNW": {
"defaultMessage": "Elképesztő! Folytasd..."
},
"thsiMl": {
"defaultMessage": "felhasználási feltételek"
},
"tzMNF3": {
"defaultMessage": "Státusz"
},
"u6uD94": {
"defaultMessage": "Fiók létrehozása"
},
"uYw2LD": {
"defaultMessage": "Közvetítés"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Kezdj el gépelni"
},
"wCIL7o": {
"defaultMessage": "Közvetítés a Nostr-án"
},
"wEQDC6": {
"defaultMessage": "Módosítás"
},
"wMKVFz": {
"defaultMessage": "Válassz hangot..."
},
"wOy57k": {
"defaultMessage": "Add meg a streamelésed célját"
},
"wzWWzV": {
"defaultMessage": "Top zapperek"
},
"x82IOl": {
"defaultMessage": "Némítás"
},
"y867Vs": {
"defaultMessage": "Hangerő"
},
"yzKwBQ": {
"defaultMessage": "pl. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Riadó"
}
}

421
src/translations/it_IT.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Immagine"
},
"+AcVD+": {
"defaultMessage": "Niente emails, solo bellezza!"
},
"+vVZ/G": {
"defaultMessage": "Connetti"
},
"/0TOL5": {
"defaultMessage": "Importo"
},
"/EvlqN": {
"defaultMessage": "estensione per firma con nostr"
},
"/GCoTA": {
"defaultMessage": "Cancella"
},
"04lmFi": {
"defaultMessage": "Salva la chiave"
},
"0GfNiL": {
"defaultMessage": "Obiettivo Zap dello Stream"
},
"0VV/sK": {
"defaultMessage": "Obiettivo"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "es. nome@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Aggiungi"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} spettatori"
},
"3df560": {
"defaultMessage": "Effettua il login tramite chiave privata"
},
"47FYwb": {
"defaultMessage": "Elimina"
},
"4l69eO": {
"defaultMessage": "Hmm, il tuo indirizzo lightning sembra non essere corretto"
},
"4l6vz1": {
"defaultMessage": "Copia"
},
"4uI538": {
"defaultMessage": "Soluzioni"
},
"5JcXdV": {
"defaultMessage": "Crea un account"
},
"5QYdPU": {
"defaultMessage": "Ora di inizio"
},
"5kx+2v": {
"defaultMessage": "Url del server"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Importo minimo per \"da scritto a parlato\""
},
"8YT6ja": {
"defaultMessage": "Inserisci il testo da pronunciare"
},
"9WRlF4": {
"defaultMessage": "Invia"
},
"9a9+ww": {
"defaultMessage": "Titolo"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} ha effettuato uno zap di {amount} sats"
},
"Atr2p4": {
"defaultMessage": "Contenuto NSFW"
},
"AukrPM": {
"defaultMessage": "Dati spettatori non disponibili"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Chiave privata"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Impostazioni"
},
"DZKuuP": {
"defaultMessage": "Accesso effettuato come"
},
"Dn82AL": {
"defaultMessage": "Dal vivo"
},
"ESyhzp": {
"defaultMessage": "Il tuo commento per {name}"
},
"FjDlus": {
"defaultMessage": "Puoi sempre sostituirlo con il tuo indirizzo in seguito."
},
"Fodi9+": {
"defaultMessage": "Ricevi pagamenti da parte degli spettatori"
},
"G/yZLu": {
"defaultMessage": "Elimina"
},
"Gq6x9o": {
"defaultMessage": "Immagine di copertina"
},
"H/bNs9": {
"defaultMessage": "Salvalo e tienilo in un posto sicuro! Se perdi questa chiave non potrai più effettuare l'accesso al tuo account. Esatto, è una cosa seria!"
},
"H5+NAX": {
"defaultMessage": "Bilancio"
},
"HAlOn1": {
"defaultMessage": "Nome"
},
"I/TubD": {
"defaultMessage": "Selezione un obiettivo..."
},
"I1kjHI": {
"defaultMessage": "Supporta {markdown}"
},
"IJDKz3": {
"defaultMessage": "Importo dello Zap in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Salva"
},
"k21gTS": {
"defaultMessage": "es. su di me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "Un breve descrizione del contenuto"
},
"nBCvvJ": {
"defaultMessage": "Ricarica"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Spettatori correnti"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/ja_JP.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "画像"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "接続"
},
"/0TOL5": {
"defaultMessage": "金額"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "クリア"
},
"04lmFi": {
"defaultMessage": "鍵の保存"
},
"0GfNiL": {
"defaultMessage": "ザップ目標額を配信"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "タグ"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "追加"
},
"2CGh/0": {
"defaultMessage": "ライブ配信中"
},
"3HwrQo": {
"defaultMessage": "ザップ!"
},
"3adEeb": {
"defaultMessage": "{n} 人が視聴中"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "キャンセル"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "コピー"
},
"4uI538": {
"defaultMessage": "解像度"
},
"5JcXdV": {
"defaultMessage": "アカウントを作成する"
},
"5QYdPU": {
"defaultMessage": "開始時間"
},
"5kx+2v": {
"defaultMessage": "サーバー URL"
},
"6Z2pvJ": {
"defaultMessage": "配信の提供元"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "送信"
},
"9a9+ww": {
"defaultMessage": "タイトル"
},
"9anxhq": {
"defaultMessage": "開始"
},
"AIHaPH": {
"defaultMessage": "{person} が {amount} sats をザップしました"
},
"Atr2p4": {
"defaultMessage": "不適切な内容"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "ログイン"
},
"BGxpTN": {
"defaultMessage": "チャット配信"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "ログアウト"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "ライブ配信中"
},
"ESyhzp": {
"defaultMessage": "{name} へのコメント"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "削除"
},
"Gq6x9o": {
"defaultMessage": "カバー画像"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "残高"
},
"HAlOn1": {
"defaultMessage": "名前"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "{markdown} をサポート"
},
"IJDKz3": {
"defaultMessage": "ザップ金額 ({currency})"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "アップロード中..."
},
"Jq3FDz": {
"defaultMessage": "コンテンツ"
},
"K3r6DQ": {
"defaultMessage": "削除"
},
"K3uH1C": {
"defaultMessage": "オフライン"
},
"K7AkdL": {
"defaultMessage": "表示"
},
"KkIL3s": {
"defaultMessage": "いいえ、私は18歳以下です"
},
"LknBsU": {
"defaultMessage": "配信キー"
},
"My6HwN": {
"defaultMessage": "はい、大丈夫です"
},
"O2Cy6m": {
"defaultMessage": "はい、18歳以上です"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "共有"
},
"OWgHbg": {
"defaultMessage": "カードの編集"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "{estimate} について"
},
"QRHNuF": {
"defaultMessage": "今日は何を配信していますか?"
},
"QRRCp0": {
"defaultMessage": "配信先URL"
},
"QceMQZ": {
"defaultMessage": "目標額: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name}{amount}"
},
"RJOmzk": {
"defaultMessage": "{provider} の {terms} を読み、同意します。"
},
"RXQdxR": {
"defaultMessage": "メッセージを書き込むにはログインしてください!"
},
"RrCui3": {
"defaultMessage": "概要"
},
"TP/cMX": {
"defaultMessage": "終了しました"
},
"TaTRKo": {
"defaultMessage": "配信開始"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "カードを追加"
},
"UfSot5": {
"defaultMessage": "過去の配信"
},
"VA/Z1S": {
"defaultMessage": "非表示"
},
"W9355R": {
"defaultMessage": "ミュート解除"
},
"X2PZ7D": {
"defaultMessage": "目標を設定"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "これはあとで変更することができます"
},
"acrOoz": {
"defaultMessage": "続ける"
},
"cPIKU2": {
"defaultMessage": "フォロー中"
},
"cvAsEh": {
"defaultMessage": "{date} に配信されました"
},
"cyR7Kh": {
"defaultMessage": "戻る"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "トップザッパー"
},
"ebmhes": {
"defaultMessage": "Nostr 拡張機能"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "ザップ"
},
"fc2iho": {
"defaultMessage": "ファイルを追加"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "配信予定"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "チャットウィジェット"
},
"ieGrWo": {
"defaultMessage": "フォロー"
},
"itPgxd": {
"defaultMessage": "プロフィール"
},
"izWS4J": {
"defaultMessage": "フォロー解除"
},
"jr4+vD": {
"defaultMessage": "マークダウン"
},
"jvo0vs": {
"defaultMessage": "保存"
},
"k21gTS": {
"defaultMessage": "例:自己紹介"
},
"kp0NPF": {
"defaultMessage": "予定あり"
},
"lZpRMR": {
"defaultMessage": "この配信にヌードやポルノコンテンツが含まれている場合は、ここをチェックしてください。"
},
"ljmS5P": {
"defaultMessage": "エンドポイント"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "コンテンツの簡単な説明"
},
"nBCvvJ": {
"defaultMessage": "アカウントチャージ"
},
"nOaArs": {
"defaultMessage": "プロフィールを設定"
},
"nwA8Os": {
"defaultMessage": "カードを追加"
},
"oHPB8Q": {
"defaultMessage": "{name} をザップ"
},
"oZrFyI": {
"defaultMessage": "配信タイプはHLSでなければなりません"
},
"pO/lPX": {
"defaultMessage": "配信予定:{date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "性的に露骨な表現が含まれています!"
},
"rbrahO": {
"defaultMessage": "終了"
},
"rfC1Zq": {
"defaultMessage": "カードを保存する"
},
"rgsbu9": {
"defaultMessage": "現在の視聴者数"
},
"s5ksS7": {
"defaultMessage": "画像リンク"
},
"s7V+5p": {
"defaultMessage": "年齢を確認してください"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "着金中のザップ"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "利用規約"
},
"tzMNF3": {
"defaultMessage": "ステータス"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "配信"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "入力を開始"
},
"wCIL7o": {
"defaultMessage": "Nostr で配信"
},
"wEQDC6": {
"defaultMessage": "編集"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "配信目標を追加"
},
"wzWWzV": {
"defaultMessage": "トップザッパー"
},
"x82IOl": {
"defaultMessage": "ミュート"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "ザップアラート"
}
}

416
src/translations/ko_KR.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/nl_NL.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Afbeelding"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Verbinden"
},
"/0TOL5": {
"defaultMessage": "Aantal"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Wissen"
},
"04lmFi": {
"defaultMessage": "Bewaar Sleutel"
},
"0GfNiL": {
"defaultMessage": "Stream Zap-doelen"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Labels"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Toevoegen"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} kijkers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Annuleer"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Kopiëren"
},
"4uI538": {
"defaultMessage": "Resoluties"
},
"5JcXdV": {
"defaultMessage": "Account aanmaken"
},
"5QYdPU": {
"defaultMessage": "Start Tijd"
},
"5kx+2v": {
"defaultMessage": "Url van server"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Verzenden"
},
"9a9+ww": {
"defaultMessage": "Titel"
},
"9anxhq": {
"defaultMessage": "Begint"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW-inhoud"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Inloggen"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Uitloggen"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Uw reactie voor {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Verwijderen"
},
"Gq6x9o": {
"defaultMessage": "Omslag Afbeelding"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Saldo"
},
"HAlOn1": {
"defaultMessage": "Naam"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Ondersteunt {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap hoeveelheid in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Bezig met uploaden..."
},
"Jq3FDz": {
"defaultMessage": "Inhoud"
},
"K3r6DQ": {
"defaultMessage": "Wis"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Weergeven"
},
"KkIL3s": {
"defaultMessage": "Nee, ik ben jonger dan 18"
},
"LknBsU": {
"defaultMessage": "Stream Sleutel"
},
"My6HwN": {
"defaultMessage": "Oké, het is veilig"
},
"O2Cy6m": {
"defaultMessage": "Ja, ik ben ouder dan 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Deel"
},
"OWgHbg": {
"defaultMessage": "Kaart bewerken"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "Over {estimate}"
},
"QRHNuF": {
"defaultMessage": "Wat streamen we vandaag?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Doel: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} met {amount}"
},
"RJOmzk": {
"defaultMessage": "Ik heb {provider}'s {terms} gelezen en ga hiermee akkoord."
},
"RXQdxR": {
"defaultMessage": "Log in om berichten te schrijven!"
},
"RrCui3": {
"defaultMessage": "Overzicht"
},
"TP/cMX": {
"defaultMessage": "Beëindigd"
},
"TaTRKo": {
"defaultMessage": "Stream Starten"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Kaart Toevoegen"
},
"UfSot5": {
"defaultMessage": "Afgelopen Streams"
},
"VA/Z1S": {
"defaultMessage": "Verberg"
},
"W9355R": {
"defaultMessage": "Niet langer negeren"
},
"X2PZ7D": {
"defaultMessage": "Doel aanmaken"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "U kunt dit later wijzigen"
},
"acrOoz": {
"defaultMessage": "Hervatten"
},
"cPIKU2": {
"defaultMessage": "Volgend"
},
"cvAsEh": {
"defaultMessage": "Gestreamd op {date}"
},
"cyR7Kh": {
"defaultMessage": "Vorige"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extensie"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Bestand toevoegen"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Inplannen"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Volgen"
},
"itPgxd": {
"defaultMessage": "Profiel"
},
"izWS4J": {
"defaultMessage": "Ontvolgen"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Opslaan"
},
"k21gTS": {
"defaultMessage": "bijv. over mij"
},
"kp0NPF": {
"defaultMessage": "Gepland"
},
"lZpRMR": {
"defaultMessage": "Controleer hier of deze stream naaktheid of pornografische inhoud bevat."
},
"ljmS5P": {
"defaultMessage": "Eindpunt"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "Een korte beschrijving van de inhoud"
},
"nBCvvJ": {
"defaultMessage": "Opvullen"
},
"nOaArs": {
"defaultMessage": "Profiel instellen"
},
"nwA8Os": {
"defaultMessage": "Kaart toevoegen"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type moet HLS zijn"
},
"pO/lPX": {
"defaultMessage": "Gepland voor {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Pas op. Seksueel expliciet materiaal!"
},
"rbrahO": {
"defaultMessage": "Sluit"
},
"rfC1Zq": {
"defaultMessage": "Bewaar kaart"
},
"rgsbu9": {
"defaultMessage": "Huidige kijkers"
},
"s5ksS7": {
"defaultMessage": "Afbeeldingslink"
},
"s7V+5p": {
"defaultMessage": "Bevestig uw leeftijd"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Inkomende Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "algemene voorwaarden"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Begin met typen"
},
"wCIL7o": {
"defaultMessage": "Uitzending op Nostr"
},
"wEQDC6": {
"defaultMessage": "Bewerk"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Voeg streamdoel toe"
},
"wzWWzV": {
"defaultMessage": "Top Zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/no_NO.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/pl_PL.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/pt_BR.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Imagem"
},
"+AcVD+": {
"defaultMessage": "Sem e-mails, só coisas incríveis!"
},
"+vVZ/G": {
"defaultMessage": "Conectar"
},
"/0TOL5": {
"defaultMessage": "Quantidade"
},
"/EvlqN": {
"defaultMessage": "extensão do nostr signer"
},
"/GCoTA": {
"defaultMessage": "Limpar"
},
"04lmFi": {
"defaultMessage": "Salvar Chave"
},
"0GfNiL": {
"defaultMessage": "Metas de Transmissão Zap"
},
"0VV/sK": {
"defaultMessage": "Meta"
},
"1EYCdR": {
"defaultMessage": "Etiquetas"
},
"1qsXCO": {
"defaultMessage": "eg.nome@carteira.com"
},
"2/2yg+": {
"defaultMessage": "Adicionar"
},
"2CGh/0": {
"defaultMessage": "ao vivo"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} espectadores"
},
"3df560": {
"defaultMessage": "Entrar com chave privada"
},
"47FYwb": {
"defaultMessage": "Cancelar"
},
"4l69eO": {
"defaultMessage": "Hmm, seu endereço lightning parece errado"
},
"4l6vz1": {
"defaultMessage": "Copiar"
},
"4uI538": {
"defaultMessage": "Resoluções"
},
"5JcXdV": {
"defaultMessage": "Criar Conta"
},
"5QYdPU": {
"defaultMessage": "Hora de Início"
},
"5kx+2v": {
"defaultMessage": "Url do Servidor"
},
"6Z2pvJ": {
"defaultMessage": "Provedores de Transmissão"
},
"6pr6hJ": {
"defaultMessage": "Quantidade mínima para texto em fala"
},
"8YT6ja": {
"defaultMessage": "Insira texto para fala"
},
"9WRlF4": {
"defaultMessage": "Enviar"
},
"9a9+ww": {
"defaultMessage": "Título"
},
"9anxhq": {
"defaultMessage": "Começar"
},
"AIHaPH": {
"defaultMessage": "{person} zapeou {amount} sats"
},
"Atr2p4": {
"defaultMessage": "Conteúdo NSFW"
},
"AukrPM": {
"defaultMessage": "Sem dados disponíveis do telespectador"
},
"AyGauy": {
"defaultMessage": "Entrar"
},
"BGxpTN": {
"defaultMessage": "Chat do stream"
},
"Bep/gA": {
"defaultMessage": "Chave privada"
},
"C81/uG": {
"defaultMessage": "Sair"
},
"D3idYv": {
"defaultMessage": "Configurações"
},
"DZKuuP": {
"defaultMessage": "Logado como"
},
"Dn82AL": {
"defaultMessage": "Ao vivo"
},
"ESyhzp": {
"defaultMessage": "Seu comentário para {name}"
},
"FjDlus": {
"defaultMessage": "Você sempre pode substituí-lo com seu próprio endereço mais tarde."
},
"Fodi9+": {
"defaultMessage": "Seja pago pelos espectadores"
},
"G/yZLu": {
"defaultMessage": "Remover"
},
"Gq6x9o": {
"defaultMessage": "Imagem de Capa"
},
"H/bNs9": {
"defaultMessage": "Salve isto e mantenha-o seguro! Se você perder esta chave, você não será capaz de acessar a sua conta nunca mais. Sim, é grave deste jeito!"
},
"H5+NAX": {
"defaultMessage": "Saldo"
},
"HAlOn1": {
"defaultMessage": "Nome"
},
"I/TubD": {
"defaultMessage": "Selecione uma meta..."
},
"I1kjHI": {
"defaultMessage": "Suporta {markdown}"
},
"IJDKz3": {
"defaultMessage": "Quantidade de Zap em {currency}"
},
"INlWvJ": {
"defaultMessage": "OU"
},
"JEsxDw": {
"defaultMessage": "Carregando..."
},
"Jq3FDz": {
"defaultMessage": "Conteúdo"
},
"K3r6DQ": {
"defaultMessage": "Excluir"
},
"K3uH1C": {
"defaultMessage": "desconectado"
},
"K7AkdL": {
"defaultMessage": "Mostrar"
},
"KkIL3s": {
"defaultMessage": "Não, eu tenho menos de 18"
},
"LknBsU": {
"defaultMessage": "Chave de Transmissão"
},
"My6HwN": {
"defaultMessage": "Ok, está seguro"
},
"O2Cy6m": {
"defaultMessage": "Sim, eu sou maior de 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Compartilhar"
},
"OWgHbg": {
"defaultMessage": "Editar cartão"
},
"Oxqtyf": {
"defaultMessage": "Nós conectamos você com uma carteira lightning para que você possa ser pago pelos seus espectadores imediatamente!"
},
"Q3au2v": {
"defaultMessage": "Sobre {estimate}"
},
"QRHNuF": {
"defaultMessage": "O que nós vamos transmitir hoje?"
},
"QRRCp0": {
"defaultMessage": "URL da transmissão"
},
"QceMQZ": {
"defaultMessage": "Meta: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} com {amount}"
},
"RJOmzk": {
"defaultMessage": "Eu li e concordo com {provider} {terms}."
},
"RXQdxR": {
"defaultMessage": "Por favor, faça login para escrever mensagens!"
},
"RrCui3": {
"defaultMessage": "Resumo"
},
"TP/cMX": {
"defaultMessage": "Encerrado"
},
"TaTRKo": {
"defaultMessage": "Iniciar Transmissão"
},
"TwyMau": {
"defaultMessage": "Conta"
},
"UJBFYK": {
"defaultMessage": "Adicionar Cartão"
},
"UfSot5": {
"defaultMessage": "Transmissões Passadas"
},
"VA/Z1S": {
"defaultMessage": "Ocultar"
},
"W9355R": {
"defaultMessage": "Desmutar"
},
"X2PZ7D": {
"defaultMessage": "Criar Meta"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Este método é inseguro. Recomendamos usar um {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Você pode alterar isto mais tarde"
},
"acrOoz": {
"defaultMessage": "Continuar"
},
"cPIKU2": {
"defaultMessage": "Seguindo"
},
"cvAsEh": {
"defaultMessage": "Transmitido em {date}"
},
"cyR7Kh": {
"defaultMessage": "Voltar"
},
"d5zWyh": {
"defaultMessage": "Testar voz"
},
"dVD/AR": {
"defaultMessage": "Melhores Zappers"
},
"ebmhes": {
"defaultMessage": "Extensão Nostr"
},
"f6biFA": {
"defaultMessage": "Ah, e você tem {n} sats de transmissão por nossa conta! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Adicionar Arquivo"
},
"feZ/kG": {
"defaultMessage": "Entrar com Chave Privada (inseguro)"
},
"hGQqkW": {
"defaultMessage": "Agendar"
},
"heyxZL": {
"defaultMessage": "Habilitar texto para fala"
},
"hpl4BP": {
"defaultMessage": "Widget de chat"
},
"ieGrWo": {
"defaultMessage": "Seguir"
},
"itPgxd": {
"defaultMessage": "Perfil"
},
"izWS4J": {
"defaultMessage": "Deixar de seguir"
},
"jr4+vD": {
"defaultMessage": "Formatação (markdown)"
},
"jvo0vs": {
"defaultMessage": "Salvar"
},
"k21gTS": {
"defaultMessage": "ex. sobre mim"
},
"kp0NPF": {
"defaultMessage": "Planejado"
},
"lZpRMR": {
"defaultMessage": "Verifique aqui se esta transmissão possui conteúdo de nudez ou pornográfico."
},
"ljmS5P": {
"defaultMessage": "Ponto final"
},
"mnJYBQ": {
"defaultMessage": "Voz"
},
"mtNGwh": {
"defaultMessage": "Uma breve descrição do conteúdo"
},
"nBCvvJ": {
"defaultMessage": "Cobrir valor"
},
"nOaArs": {
"defaultMessage": "Configurar Perfil"
},
"nwA8Os": {
"defaultMessage": "Adicionar cartão"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "O tipo de transmissão deve ser HLS"
},
"pO/lPX": {
"defaultMessage": "Agendado para {date}"
},
"r2Jjms": {
"defaultMessage": "Entrar"
},
"rWBFZA": {
"defaultMessage": "Conteúdo sexual explícito à frente!"
},
"rbrahO": {
"defaultMessage": "Fechar"
},
"rfC1Zq": {
"defaultMessage": "Salvar cartão"
},
"rgsbu9": {
"defaultMessage": "Espectadores Atuais"
},
"s5ksS7": {
"defaultMessage": "Link da Imagem"
},
"s7V+5p": {
"defaultMessage": "Confirme sua idade"
},
"sInm1h": {
"defaultMessage": "Mensagem Zap"
},
"tG1ST3": {
"defaultMessage": "Zap recebido"
},
"tM6fNW": {
"defaultMessage": "Incrível! Continue.."
},
"thsiMl": {
"defaultMessage": "termos e condições"
},
"tzMNF3": {
"defaultMessage": "Situação"
},
"u6uD94": {
"defaultMessage": "Criar uma Conta"
},
"uYw2LD": {
"defaultMessage": "Fazer Transmissão"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Comece a digitar"
},
"wCIL7o": {
"defaultMessage": "Transmitir no Nostr"
},
"wEQDC6": {
"defaultMessage": "Editar"
},
"wMKVFz": {
"defaultMessage": "Selecionar voz..."
},
"wOy57k": {
"defaultMessage": "Adicionar meta de transmissão"
},
"wzWWzV": {
"defaultMessage": "Melhores zappers"
},
"x82IOl": {
"defaultMessage": "Silenciar"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "ex. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Alerta Zap"
}
}

416
src/translations/pt_PT.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/ro_RO.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/ru_RU.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Изображение"
},
"+AcVD+": {
"defaultMessage": "В ящике нет ни одного письма, только величие!"
},
"+vVZ/G": {
"defaultMessage": "Подключить"
},
"/0TOL5": {
"defaultMessage": "Количество"
},
"/EvlqN": {
"defaultMessage": "Расширение для подписи nostr"
},
"/GCoTA": {
"defaultMessage": "Сбросить"
},
"04lmFi": {
"defaultMessage": "Сохранить ключ"
},
"0GfNiL": {
"defaultMessage": "Зап-цели трансляции"
},
"0VV/sK": {
"defaultMessage": "Цель"
},
"1EYCdR": {
"defaultMessage": "Теги"
},
"1qsXCO": {
"defaultMessage": "например, name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Добавить"
},
"2CGh/0": {
"defaultMessage": "Прямой эфир"
},
"3HwrQo": {
"defaultMessage": "Зап!"
},
"3adEeb": {
"defaultMessage": "{n} зрителей"
},
"3df560": {
"defaultMessage": "Войти с приватным ключом"
},
"47FYwb": {
"defaultMessage": "Отменить"
},
"4l69eO": {
"defaultMessage": "Хм, похоже вы ввели неверный лайтнинг-адрес"
},
"4l6vz1": {
"defaultMessage": "Копировать"
},
"4uI538": {
"defaultMessage": "Расширения"
},
"5JcXdV": {
"defaultMessage": "Создать аккаунт"
},
"5QYdPU": {
"defaultMessage": "Время начала"
},
"5kx+2v": {
"defaultMessage": "URL сервера"
},
"6Z2pvJ": {
"defaultMessage": "Стрим-провайдеры"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Отправить"
},
"9a9+ww": {
"defaultMessage": "Название"
},
"9anxhq": {
"defaultMessage": "Начало"
},
"AIHaPH": {
"defaultMessage": "{person} запнул {amount} сат"
},
"Atr2p4": {
"defaultMessage": "NSFW контент"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Логин"
},
"BGxpTN": {
"defaultMessage": "Чат стрима"
},
"Bep/gA": {
"defaultMessage": "Приватный ключ"
},
"C81/uG": {
"defaultMessage": "Выйти"
},
"D3idYv": {
"defaultMessage": "Настройки"
},
"DZKuuP": {
"defaultMessage": "Авторизованы как"
},
"Dn82AL": {
"defaultMessage": "Прямой эфир"
},
"ESyhzp": {
"defaultMessage": "Ваш комментарий к {name}"
},
"FjDlus": {
"defaultMessage": "Можно заменить своим адресом позже."
},
"Fodi9+": {
"defaultMessage": "Получайте оплату от зрителей"
},
"G/yZLu": {
"defaultMessage": "Удалить"
},
"Gq6x9o": {
"defaultMessage": "Обложка"
},
"H/bNs9": {
"defaultMessage": "Сохраните этот ключ и храните его в безопасности! Если вы его потеряете, вы не сможете снова войти в свою учетную запись. Да, все настолько серьезно!"
},
"H5+NAX": {
"defaultMessage": "Баланс"
},
"HAlOn1": {
"defaultMessage": "Название"
},
"I/TubD": {
"defaultMessage": "Выберите цель..."
},
"I1kjHI": {
"defaultMessage": "Поддерживает {markdown}"
},
"IJDKz3": {
"defaultMessage": "Сумма запа в {currency}"
},
"INlWvJ": {
"defaultMessage": "ИЛИ"
},
"JEsxDw": {
"defaultMessage": "Загрузка..."
},
"Jq3FDz": {
"defaultMessage": "Контент"
},
"K3r6DQ": {
"defaultMessage": "Удалить"
},
"K3uH1C": {
"defaultMessage": "оффлайн"
},
"K7AkdL": {
"defaultMessage": "Показать"
},
"KkIL3s": {
"defaultMessage": "Нет, я моложе 18 лет"
},
"LknBsU": {
"defaultMessage": "Ключ стрима"
},
"My6HwN": {
"defaultMessage": "Ок, безопасно"
},
"O2Cy6m": {
"defaultMessage": "Да, я старше 18 лет"
},
"OEW7yJ": {
"defaultMessage": "Запы"
},
"OKhRC6": {
"defaultMessage": "Поделиться"
},
"OWgHbg": {
"defaultMessage": "Редактировать карточку"
},
"Oxqtyf": {
"defaultMessage": "Мы подключили вас с помощью лайтнинг-кошелька, чтобы вы уже сейчас могли получать средства от зрителей!"
},
"Q3au2v": {
"defaultMessage": "Примерно {estimate}"
},
"QRHNuF": {
"defaultMessage": "Что будем транслировать сегодня?"
},
"QRRCp0": {
"defaultMessage": "URL трансляции"
},
"QceMQZ": {
"defaultMessage": "Цель: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} с {amount}"
},
"RJOmzk": {
"defaultMessage": "Я прочитал и согласен с {provider} {terms}."
},
"RXQdxR": {
"defaultMessage": "Пожалуйста, войдите, чтобы писать сообщения!"
},
"RrCui3": {
"defaultMessage": "Краткое описание"
},
"TP/cMX": {
"defaultMessage": "Завершено"
},
"TaTRKo": {
"defaultMessage": "Начать трансляцию"
},
"TwyMau": {
"defaultMessage": "Аккаунт"
},
"UJBFYK": {
"defaultMessage": "Добавить карточку"
},
"UfSot5": {
"defaultMessage": "Предыдущие трансляции"
},
"VA/Z1S": {
"defaultMessage": "Скрыть"
},
"W9355R": {
"defaultMessage": "Включить уведомления"
},
"X2PZ7D": {
"defaultMessage": "Установить цель"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Этот метод небезопасен. Мы рекомендуем использовать {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Вы сможете изменить эту настройку позже"
},
"acrOoz": {
"defaultMessage": "Продолжить"
},
"cPIKU2": {
"defaultMessage": "Подписки"
},
"cvAsEh": {
"defaultMessage": "Трансляция проведена {date}"
},
"cyR7Kh": {
"defaultMessage": "Назад"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Топ поддержавших"
},
"ebmhes": {
"defaultMessage": "Nostr расширение"
},
"f6biFA": {
"defaultMessage": "О, и вам зачислено {n} сат для стриминга за наш счет! 💜"
},
"fBI91o": {
"defaultMessage": "Зап"
},
"fc2iho": {
"defaultMessage": "Добавить файл"
},
"feZ/kG": {
"defaultMessage": "Войти с помощью приватного ключа (небезопасно)"
},
"hGQqkW": {
"defaultMessage": "Запланировать"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Виджет чата"
},
"ieGrWo": {
"defaultMessage": "Подписаться"
},
"itPgxd": {
"defaultMessage": "Профиль"
},
"izWS4J": {
"defaultMessage": "Отписаться"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Сохранить"
},
"k21gTS": {
"defaultMessage": "например, обо мне"
},
"kp0NPF": {
"defaultMessage": "Запланировано"
},
"lZpRMR": {
"defaultMessage": "Поставьте галочку, если в этом стриме содержится нагота или порнографический контент."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "Краткое описание контента"
},
"nBCvvJ": {
"defaultMessage": "Пополнить"
},
"nOaArs": {
"defaultMessage": "Настроить профиль"
},
"nwA8Os": {
"defaultMessage": "Добавить карточку"
},
"oHPB8Q": {
"defaultMessage": "Запнуть ({name}"
},
"oZrFyI": {
"defaultMessage": "Тип потока должен быть HLS"
},
"pO/lPX": {
"defaultMessage": "Запланировано на {date}"
},
"r2Jjms": {
"defaultMessage": "Войти"
},
"rWBFZA": {
"defaultMessage": "Сексуально откровенный материал!"
},
"rbrahO": {
"defaultMessage": "Закрыть"
},
"rfC1Zq": {
"defaultMessage": "Сохранить карточку"
},
"rgsbu9": {
"defaultMessage": "Текущие зрители"
},
"s5ksS7": {
"defaultMessage": "Ссылка на изображение"
},
"s7V+5p": {
"defaultMessage": "Подтвердите свой возраст"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Входящий Зап"
},
"tM6fNW": {
"defaultMessage": "Отлично! Продолжаем.."
},
"thsiMl": {
"defaultMessage": "Условия использования"
},
"tzMNF3": {
"defaultMessage": "Статус"
},
"u6uD94": {
"defaultMessage": "Создать аккаунт"
},
"uYw2LD": {
"defaultMessage": "Стрим"
},
"vrTOHJ": {
"defaultMessage": "{amount} сат"
},
"w0Xm2F": {
"defaultMessage": "Начните печатать"
},
"wCIL7o": {
"defaultMessage": "Транслировать на Nostr"
},
"wEQDC6": {
"defaultMessage": "Редактировать"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Добавить цели стрима"
},
"wzWWzV": {
"defaultMessage": "Топ поддержавших"
},
"x82IOl": {
"defaultMessage": "Заглушить"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "например, nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Оповещение о запе"
}
}

416
src/translations/sr_SP.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/sv_SE.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Bild"
},
"+AcVD+": {
"defaultMessage": "Inga e-post, bara fantastiskt!"
},
"+vVZ/G": {
"defaultMessage": "Anslut"
},
"/0TOL5": {
"defaultMessage": "Belopp"
},
"/EvlqN": {
"defaultMessage": "nostr signer-tillägg"
},
"/GCoTA": {
"defaultMessage": "Rensa"
},
"04lmFi": {
"defaultMessage": "Spara nyckel"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Mål"
},
"0VV/sK": {
"defaultMessage": "Mål"
},
"1EYCdR": {
"defaultMessage": "Taggar"
},
"1qsXCO": {
"defaultMessage": "t.ex namn@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Lägg till"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} tittare"
},
"3df560": {
"defaultMessage": "Logga in med privat nyckel"
},
"47FYwb": {
"defaultMessage": "Avbryt"
},
"4l69eO": {
"defaultMessage": "Hmm, din lightning adress ser fel ut"
},
"4l6vz1": {
"defaultMessage": "Kopiera"
},
"4uI538": {
"defaultMessage": "Upplösningar"
},
"5JcXdV": {
"defaultMessage": "Skapa konto"
},
"5QYdPU": {
"defaultMessage": "Starttid"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Leverantörer"
},
"6pr6hJ": {
"defaultMessage": "Minsta belopp för text till tal"
},
"8YT6ja": {
"defaultMessage": "Infoga text att prata"
},
"9WRlF4": {
"defaultMessage": "Skicka"
},
"9a9+ww": {
"defaultMessage": "Titel"
},
"9anxhq": {
"defaultMessage": "Startar"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW-innehåll"
},
"AukrPM": {
"defaultMessage": "Ingen tittardata tillgänglig"
},
"AyGauy": {
"defaultMessage": "Logga in"
},
"BGxpTN": {
"defaultMessage": "Stream Chatt"
},
"Bep/gA": {
"defaultMessage": "Privat nyckel"
},
"C81/uG": {
"defaultMessage": "Logga ut"
},
"D3idYv": {
"defaultMessage": "Inställningar"
},
"DZKuuP": {
"defaultMessage": "Inloggad som"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Din kommentar till {name}"
},
"FjDlus": {
"defaultMessage": "Du kan alltid ersätta den med din egen adress senare."
},
"Fodi9+": {
"defaultMessage": "Få betalt av tittarna"
},
"G/yZLu": {
"defaultMessage": "Ta bort"
},
"Gq6x9o": {
"defaultMessage": "Omslagsbild"
},
"H/bNs9": {
"defaultMessage": "Spara detta och håll det säkert! Om du förlorar denna nyckel kommer du inte att kunna komma åt ditt konto någonsin igen. Japp, det är så allvarligt!"
},
"H5+NAX": {
"defaultMessage": "Saldo"
},
"HAlOn1": {
"defaultMessage": "Namn"
},
"I/TubD": {
"defaultMessage": "Välj ett mål..."
},
"I1kjHI": {
"defaultMessage": "Stöder {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap belopp i {currency}"
},
"INlWvJ": {
"defaultMessage": "ELLER"
},
"JEsxDw": {
"defaultMessage": "Laddar upp..."
},
"Jq3FDz": {
"defaultMessage": "Innehåll"
},
"K3r6DQ": {
"defaultMessage": "Radera"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Visa"
},
"KkIL3s": {
"defaultMessage": "Nej, jag är under 18 år"
},
"LknBsU": {
"defaultMessage": "Stream nyckel"
},
"My6HwN": {
"defaultMessage": "Ok, det är säkert"
},
"O2Cy6m": {
"defaultMessage": "Ja, jag är över 18 år"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Dela"
},
"OWgHbg": {
"defaultMessage": "Redigera kort"
},
"Oxqtyf": {
"defaultMessage": "Vi fixade en lightning plånbok till dig så att du kan få betalt av tittarna direkt!"
},
"Q3au2v": {
"defaultMessage": "Om {estimate}"
},
"QRHNuF": {
"defaultMessage": "Vad streamar vi i dag?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Mål: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} med {amount}"
},
"RJOmzk": {
"defaultMessage": "Jag har läst och godkänner {provider}'s {terms}."
},
"RXQdxR": {
"defaultMessage": "Vänligen logga in för att skriva meddelanden!"
},
"RrCui3": {
"defaultMessage": "Summering"
},
"TP/cMX": {
"defaultMessage": "Avslutade"
},
"TaTRKo": {
"defaultMessage": "Starta Stream"
},
"TwyMau": {
"defaultMessage": "Konto"
},
"UJBFYK": {
"defaultMessage": "Lägg till kort"
},
"UfSot5": {
"defaultMessage": "Tidigare streamar"
},
"VA/Z1S": {
"defaultMessage": "Göm"
},
"W9355R": {
"defaultMessage": "Avtysta"
},
"X2PZ7D": {
"defaultMessage": "Skapa mål"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Denna metod är osäker. Vi rekommenderar att du använder en {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Du kan ändra detta senare"
},
"acrOoz": {
"defaultMessage": "Fortsätt"
},
"cPIKU2": {
"defaultMessage": "Följer"
},
"cvAsEh": {
"defaultMessage": "Streamas på {date}"
},
"cyR7Kh": {
"defaultMessage": "Tillbaka"
},
"d5zWyh": {
"defaultMessage": "Testa röst"
},
"dVD/AR": {
"defaultMessage": "Topp Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Tillägg"
},
"f6biFA": {
"defaultMessage": "Åh, och du har {n} sats fri streaming på oss! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Lägg till fil"
},
"feZ/kG": {
"defaultMessage": "Logga in med privat nyckel (osäkra)"
},
"hGQqkW": {
"defaultMessage": "Schemalagd"
},
"heyxZL": {
"defaultMessage": "Aktivera text till tal"
},
"hpl4BP": {
"defaultMessage": "Chatt widget"
},
"ieGrWo": {
"defaultMessage": "Följ"
},
"itPgxd": {
"defaultMessage": "Profil"
},
"izWS4J": {
"defaultMessage": "Sluta följa"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Spara"
},
"k21gTS": {
"defaultMessage": "t.ex. om mig"
},
"kp0NPF": {
"defaultMessage": "Planerade"
},
"lZpRMR": {
"defaultMessage": "Kolla här om denna ström innehåller nakenhet eller pornografiskt innehåll."
},
"ljmS5P": {
"defaultMessage": "Slutpunkt"
},
"mnJYBQ": {
"defaultMessage": "Röst"
},
"mtNGwh": {
"defaultMessage": "En kort beskrivning av innehållet"
},
"nBCvvJ": {
"defaultMessage": "Fyll på"
},
"nOaArs": {
"defaultMessage": "Konfigurera profil"
},
"nwA8Os": {
"defaultMessage": "Lägg till kort"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream typ bör vara HLS"
},
"pO/lPX": {
"defaultMessage": "Schemalagd för {date}"
},
"r2Jjms": {
"defaultMessage": "Logga In"
},
"rWBFZA": {
"defaultMessage": "Sexuellt explicit material framöver!"
},
"rbrahO": {
"defaultMessage": "Avsluta"
},
"rfC1Zq": {
"defaultMessage": "Spara kort"
},
"rgsbu9": {
"defaultMessage": "Nuvarande tittare"
},
"s5ksS7": {
"defaultMessage": "Bildlänk"
},
"s7V+5p": {
"defaultMessage": "Bekräfta din ålder"
},
"sInm1h": {
"defaultMessage": "Zap meddelande"
},
"tG1ST3": {
"defaultMessage": "Inkommande Zap"
},
"tM6fNW": {
"defaultMessage": "Fantastiskt! Fortsätt.."
},
"thsiMl": {
"defaultMessage": "regler och villkor"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Skapa ett konto"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Börja skriva"
},
"wCIL7o": {
"defaultMessage": "Sänd ut på Nostr"
},
"wEQDC6": {
"defaultMessage": "Redigera"
},
"wMKVFz": {
"defaultMessage": "Välj röst..."
},
"wOy57k": {
"defaultMessage": "Lägg till stream mål"
},
"wzWWzV": {
"defaultMessage": "Topp zappers"
},
"x82IOl": {
"defaultMessage": "Tysta"
},
"y867Vs": {
"defaultMessage": "Volym"
},
"yzKwBQ": {
"defaultMessage": "t.ex nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/sw_KE.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "Picha"
},
"+AcVD+": {
"defaultMessage": "Hakuna barua pepe, uzuri tu!"
},
"+vVZ/G": {
"defaultMessage": "Unganisha"
},
"/0TOL5": {
"defaultMessage": "Kiasi"
},
"/EvlqN": {
"defaultMessage": "nostr signer ugani"
},
"/GCoTA": {
"defaultMessage": "Futa"
},
"04lmFi": {
"defaultMessage": "Okoa ufunguo"
},
"0GfNiL": {
"defaultMessage": "Tiririsha Malengo ya Zap"
},
"0VV/sK": {
"defaultMessage": "Lengo"
},
"1EYCdR": {
"defaultMessage": "Vitambulisho"
},
"1qsXCO": {
"defaultMessage": "eg. jina@pochi.com"
},
"2/2yg+": {
"defaultMessage": "Ongeza"
},
"2CGh/0": {
"defaultMessage": "moja kwa moja"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} watazamaji"
},
"3df560": {
"defaultMessage": "Ingia kwa kutumia ufunguo wa faragha"
},
"47FYwb": {
"defaultMessage": "Ghairi"
},
"4l69eO": {
"defaultMessage": "Hmm, anwani yako ya umeme inaonekana si sahihi"
},
"4l6vz1": {
"defaultMessage": "Nakala"
},
"4uI538": {
"defaultMessage": "Maazimio"
},
"5JcXdV": {
"defaultMessage": "Tengeneza akaunti"
},
"5QYdPU": {
"defaultMessage": "Wakati wa kuanza"
},
"5kx+2v": {
"defaultMessage": "Url ya seva"
},
"6Z2pvJ": {
"defaultMessage": "Watoa huduma za mkondo"
},
"6pr6hJ": {
"defaultMessage": "Kiasi cha chini cha maandishi hadi hotuba"
},
"8YT6ja": {
"defaultMessage": "Ingiza maandishi ili kuzungumza"
},
"9WRlF4": {
"defaultMessage": "Tuma"
},
"9a9+ww": {
"defaultMessage": "Kichwa"
},
"9anxhq": {
"defaultMessage": "Huanza"
},
"AIHaPH": {
"defaultMessage": "{person} amezap {amount} sats"
},
"Atr2p4": {
"defaultMessage": "Maudhui ya NSFW"
},
"AukrPM": {
"defaultMessage": "Hakuna data ya mtazamaji inayopatikana"
},
"AyGauy": {
"defaultMessage": "Ingia"
},
"BGxpTN": {
"defaultMessage": "Mkondo Gumzo"
},
"Bep/gA": {
"defaultMessage": "Ufunguo wa kibinafsi"
},
"C81/uG": {
"defaultMessage": "Toka nje"
},
"D3idYv": {
"defaultMessage": "Mipangilio"
},
"DZKuuP": {
"defaultMessage": "Imeingia kama"
},
"Dn82AL": {
"defaultMessage": "Moja kwa moja"
},
"ESyhzp": {
"defaultMessage": "Maoni yako ya {name}"
},
"FjDlus": {
"defaultMessage": "Unaweza kubadilisha na kuweka anwani yako mwenyewe baadaye."
},
"Fodi9+": {
"defaultMessage": "Lipwe na watazamaji"
},
"G/yZLu": {
"defaultMessage": "Ondoa"
},
"Gq6x9o": {
"defaultMessage": "Picha ya Jalada"
},
"H/bNs9": {
"defaultMessage": "Hifadhi hii na ihifadhi salama! Ukipoteza ufunguo huu, hutaweza kufikia akaunti yako tena. Ndio, ni mbaya sana!"
},
"H5+NAX": {
"defaultMessage": "Mizani"
},
"HAlOn1": {
"defaultMessage": "Jina"
},
"I/TubD": {
"defaultMessage": "Chagua lengo..."
},
"I1kjHI": {
"defaultMessage": "Inaauni {markdown}"
},
"IJDKz3": {
"defaultMessage": "Kiasi cha Zap kwa {currency}"
},
"INlWvJ": {
"defaultMessage": "AU"
},
"JEsxDw": {
"defaultMessage": "Inapakia..."
},
"Jq3FDz": {
"defaultMessage": "Maudhui"
},
"K3r6DQ": {
"defaultMessage": "Futa"
},
"K3uH1C": {
"defaultMessage": "nje ya mtandao"
},
"K7AkdL": {
"defaultMessage": "Onyesha"
},
"KkIL3s": {
"defaultMessage": "Hapana, mimi ni chini ya miaka 18"
},
"LknBsU": {
"defaultMessage": "Ufunguo wa Kutiririsha"
},
"My6HwN": {
"defaultMessage": "Sawa, ni salama"
},
"O2Cy6m": {
"defaultMessage": "Ndiyo, nina zaidi ya miaka 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Shiriki"
},
"OWgHbg": {
"defaultMessage": "Hariri kadi"
},
"Oxqtyf": {
"defaultMessage": "Tulikuunganisha na pochi ya umeme ili uweze kulipwa na watazamaji mara moja!"
},
"Q3au2v": {
"defaultMessage": "Kuhusu {estimate}"
},
"QRHNuF": {
"defaultMessage": "Tunapika nini leo?"
},
"QRRCp0": {
"defaultMessage": "Tiririsha URL"
},
"QceMQZ": {
"defaultMessage": "Lengo: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} pamoja na {amount}"
},
"RJOmzk": {
"defaultMessage": "Nimesoma na kukubaliana na {terms} ya {provider}."
},
"RXQdxR": {
"defaultMessage": "Tafadhali ingia ili kuandika ujumbe!"
},
"RrCui3": {
"defaultMessage": "Muhtasari"
},
"TP/cMX": {
"defaultMessage": "Imeisha"
},
"TaTRKo": {
"defaultMessage": "Anza Kutiririsha"
},
"TwyMau": {
"defaultMessage": "Akaunti"
},
"UJBFYK": {
"defaultMessage": "Ongeza Kadi"
},
"UfSot5": {
"defaultMessage": "Mitiririko ya Zamani"
},
"VA/Z1S": {
"defaultMessage": "Ficha"
},
"W9355R": {
"defaultMessage": "Rejesha"
},
"X2PZ7D": {
"defaultMessage": "Tengeneza Lengo"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "Njia hii haina usalama. Tunapendekeza utumie {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "Unaweza kubadilisha hii baadaye"
},
"acrOoz": {
"defaultMessage": "Endelea"
},
"cPIKU2": {
"defaultMessage": "Kufuatia"
},
"cvAsEh": {
"defaultMessage": "Ilitiririshwa mnamo {date}"
},
"cyR7Kh": {
"defaultMessage": "Rudi"
},
"d5zWyh": {
"defaultMessage": "Jaribu sauti"
},
"dVD/AR": {
"defaultMessage": "Zappers za Juu"
},
"ebmhes": {
"defaultMessage": "Ugani wa Nostr"
},
"f6biFA": {
"defaultMessage": "Lo, na una {n} safu za utiririshaji bila malipo kwa ajili yetu! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Ongeza Faili"
},
"feZ/kG": {
"defaultMessage": "Ingia kwa kutumia Ufunguo wa Faragha (si salama)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Washa maandishi hadi usemi"
},
"hpl4BP": {
"defaultMessage": "Wijeti ya Soga"
},
"ieGrWo": {
"defaultMessage": "Fuata"
},
"itPgxd": {
"defaultMessage": "Wasifu"
},
"izWS4J": {
"defaultMessage": "Acha kufuata"
},
"jr4+vD": {
"defaultMessage": "Alama"
},
"jvo0vs": {
"defaultMessage": "Hifadhi"
},
"k21gTS": {
"defaultMessage": "k.m. kuhusu mimi"
},
"kp0NPF": {
"defaultMessage": "Imepangwa"
},
"lZpRMR": {
"defaultMessage": "Angalia hapa ikiwa mtiririko huu una maudhui ya uchi au ponografia."
},
"ljmS5P": {
"defaultMessage": "Mwisho"
},
"mnJYBQ": {
"defaultMessage": "Sauti"
},
"mtNGwh": {
"defaultMessage": "Maelezo mafupi ya yaliyomo"
},
"nBCvvJ": {
"defaultMessage": "Kuongeza"
},
"nOaArs": {
"defaultMessage": "Sanidi Wasifu"
},
"nwA8Os": {
"defaultMessage": "Ongeza kadi"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Aina ya mtiririko inapaswa kuwa HLS"
},
"pO/lPX": {
"defaultMessage": "Imeratibiwa tarehe {date}"
},
"r2Jjms": {
"defaultMessage": "Ingia"
},
"rWBFZA": {
"defaultMessage": "Nyenzo za ngono wazi mbele yako!"
},
"rbrahO": {
"defaultMessage": "Funga"
},
"rfC1Zq": {
"defaultMessage": "Hifadhi kadi"
},
"rgsbu9": {
"defaultMessage": "Watazamaji wa Sasa"
},
"s5ksS7": {
"defaultMessage": "Kiungo cha Picha"
},
"s7V+5p": {
"defaultMessage": "Thibitisha umri wako"
},
"sInm1h": {
"defaultMessage": "Zap ujumbe"
},
"tG1ST3": {
"defaultMessage": "Zap inayoingia"
},
"tM6fNW": {
"defaultMessage": "Inashangaza! Endelea.."
},
"thsiMl": {
"defaultMessage": "sheria na Masharti"
},
"tzMNF3": {
"defaultMessage": "Hali"
},
"u6uD94": {
"defaultMessage": "Fungua Akaunti"
},
"uYw2LD": {
"defaultMessage": "Tiririsha"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Anza kuandika"
},
"wCIL7o": {
"defaultMessage": "Tangaza kwenye Nostr"
},
"wEQDC6": {
"defaultMessage": "Hariri"
},
"wMKVFz": {
"defaultMessage": "Chagua sauti..."
},
"wOy57k": {
"defaultMessage": "Ongeza lengo la mtiririko"
},
"wzWWzV": {
"defaultMessage": "Zappers wa juu"
},
"x82IOl": {
"defaultMessage": "Nyamazisha"
},
"y867Vs": {
"defaultMessage": "Kiasi"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Tahadhari ya Zap"
}
}

421
src/translations/th_TH.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "ภาพ"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "เชื่อมต่อ"
},
"/0TOL5": {
"defaultMessage": "จำนวน"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "ล้าง"
},
"04lmFi": {
"defaultMessage": "บันทึกรหัส"
},
"0GfNiL": {
"defaultMessage": "เป้าหมาย Zaps"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "แท็ก"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "เพิ่ม"
},
"2CGh/0": {
"defaultMessage": "ถ่ายทอดสด"
},
"3HwrQo": {
"defaultMessage": "Zaps!"
},
"3adEeb": {
"defaultMessage": "ผู้ชม {n}"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "ยกเลิก"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "คัดลอก"
},
"4uI538": {
"defaultMessage": "ความละเอียด"
},
"5JcXdV": {
"defaultMessage": "สร้างบัญชี"
},
"5QYdPU": {
"defaultMessage": "เวลาเริ่ม"
},
"5kx+2v": {
"defaultMessage": "ที่อยู่ของเซิร์ฟเวอร์"
},
"6Z2pvJ": {
"defaultMessage": "เริ่มถ่ายทอดสด"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "ส่ง"
},
"9a9+ww": {
"defaultMessage": "หัวข้อ"
},
"9anxhq": {
"defaultMessage": "เริ่ม"
},
"AIHaPH": {
"defaultMessage": "{person} ส่ง Zap ให้ {amount} ⚡"
},
"Atr2p4": {
"defaultMessage": "เนื้อหาที่ไม่เหมาะสม"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "เข้าสู่ระบบ"
},
"BGxpTN": {
"defaultMessage": "ห้องสนทนา"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "ออกจากระบบ"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "ฝากข้อความถึง {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "ลบ"
},
"Gq6x9o": {
"defaultMessage": "ภาพหน้าปก"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "ยอดคงเหลือ"
},
"HAlOn1": {
"defaultMessage": "ชื่อ"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "สนับสนุน {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap ด้วย {currency} จำนวน"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "เนื้อหา"
},
"K3r6DQ": {
"defaultMessage": "ลบ"
},
"K3uH1C": {
"defaultMessage": "ออฟไลน์"
},
"K7AkdL": {
"defaultMessage": "แสดง"
},
"KkIL3s": {
"defaultMessage": "ฉันอายุต่ำกว่า 18 ปี"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "ฉันจัดเก็บรหัสไว้ดีแล้ว"
},
"O2Cy6m": {
"defaultMessage": "ฉันอายุมากกว่า 18 ปี"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "แชร์"
},
"OWgHbg": {
"defaultMessage": "เเก้ไขการ์ด"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "ประมาณ {estimate}"
},
"QRHNuF": {
"defaultMessage": "เลือกหัวข้อถ่ายทอดสดนี้"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Zap ให้ถึง {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "ฉันได้อ่าน {terms} เรียบร้อยและ เห็นด้วยกับ {provider} ในข้อกำหนดและเงื่อนไขการใช้เว็บไซต์หรือการใช้แอปพลิเคชัน"
},
"RXQdxR": {
"defaultMessage": "โปรดเข้าสู่ระบบ เพื่อร่วมส่งข้อความ"
},
"RrCui3": {
"defaultMessage": "ภาพรวม"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "เริ่มการถ่ายทอดสด"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "เพิ่มการ์ด"
},
"UfSot5": {
"defaultMessage": "การถ่ายทอดสดที่ผ่านมา"
},
"VA/Z1S": {
"defaultMessage": "ซ่อน"
},
"W9355R": {
"defaultMessage": "เปิดการมองเห็น"
},
"X2PZ7D": {
"defaultMessage": "สร้างเป้าหมาย"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "คุณยังสามารถเปลี่ยนได้ในภายหลัง"
},
"acrOoz": {
"defaultMessage": "ดำเนินการต่อ"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "ถ่ายทอดสดเมื่อ {date}"
},
"cyR7Kh": {
"defaultMessage": "กลับ"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "สุดยอดมือ Zap"
},
"ebmhes": {
"defaultMessage": "ติดตั้ง Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zaps"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "กำหนดการ"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "ติดตาม"
},
"itPgxd": {
"defaultMessage": "โปรไฟล์"
},
"izWS4J": {
"defaultMessage": "เลิกติดตาม"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "บันทึก"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "โปรดทำเครื่องหมาย หากเนื้อหามีภาพโป๊เปลือย หรือสื่อลามก"
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "เพิ่มคำอธิบายเกี่ยวกับถ่ายทอดสดนี้"
},
"nBCvvJ": {
"defaultMessage": "เติมเงิน"
},
"nOaArs": {
"defaultMessage": "ตั้งค่าโปรไฟล์"
},
"nwA8Os": {
"defaultMessage": "เพิ่มการ์ด"
},
"oHPB8Q": {
"defaultMessage": "ส่ง Zap ให้ {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "จะมีการถ่ายทอดสดเวลา {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "เตือน! เนื้อหามีส่วนของภาพโป๊เปลือย หรือสื่อลามก"
},
"rbrahO": {
"defaultMessage": "ปิด"
},
"rfC1Zq": {
"defaultMessage": "บันทึกการ์ด"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "ลิงค์รูปภาพ"
},
"s7V+5p": {
"defaultMessage": "ยืนยันอายุของคุณ"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "ข้อตกลงและเงื่อนไข"
},
"tzMNF3": {
"defaultMessage": "สถานะ"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "ถ่ายทอดสด"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "แชร์ด้วย Nostr"
},
"wEQDC6": {
"defaultMessage": "แก้ไข"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "เพิ่มเป้าหมายของการถ่ายทอดสดนี้"
},
"wzWWzV": {
"defaultMessage": "สุดยอดมือ Zap"
},
"x82IOl": {
"defaultMessage": "ปิดการมองเห็น"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/tr_TR.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/uk_UA.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

416
src/translations/vi_VN.json Normal file
View File

@ -0,0 +1,416 @@
{
"+0zv6g": {
"defaultMessage": "Image"
},
"+AcVD+": {
"defaultMessage": "No emails, just awesomeness!"
},
"+vVZ/G": {
"defaultMessage": "Connect"
},
"/0TOL5": {
"defaultMessage": "Amount"
},
"/EvlqN": {
"defaultMessage": "nostr signer extension"
},
"/GCoTA": {
"defaultMessage": "Clear"
},
"04lmFi": {
"defaultMessage": "Save Key"
},
"0GfNiL": {
"defaultMessage": "Stream Zap Goals"
},
"0VV/sK": {
"defaultMessage": "Goal"
},
"1EYCdR": {
"defaultMessage": "Tags"
},
"1qsXCO": {
"defaultMessage": "eg. name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "Add"
},
"2CGh/0": {
"defaultMessage": "live"
},
"3HwrQo": {
"defaultMessage": "Zap!"
},
"3adEeb": {
"defaultMessage": "{n} viewers"
},
"3df560": {
"defaultMessage": "Login with private key"
},
"47FYwb": {
"defaultMessage": "Cancel"
},
"4l69eO": {
"defaultMessage": "Hmm, your lightning address looks wrong"
},
"4l6vz1": {
"defaultMessage": "Copy"
},
"4uI538": {
"defaultMessage": "Resolutions"
},
"5JcXdV": {
"defaultMessage": "Create Account"
},
"5QYdPU": {
"defaultMessage": "Start Time"
},
"5kx+2v": {
"defaultMessage": "Server Url"
},
"6Z2pvJ": {
"defaultMessage": "Stream Providers"
},
"6pr6hJ": {
"defaultMessage": "Minimum amount for text to speech"
},
"8YT6ja": {
"defaultMessage": "Insert text to speak"
},
"9WRlF4": {
"defaultMessage": "Send"
},
"9a9+ww": {
"defaultMessage": "Title"
},
"9anxhq": {
"defaultMessage": "Starts"
},
"AIHaPH": {
"defaultMessage": "{person} zapped {amount} sats"
},
"Atr2p4": {
"defaultMessage": "NSFW Content"
},
"AukrPM": {
"defaultMessage": "No viewer data available"
},
"AyGauy": {
"defaultMessage": "Login"
},
"BGxpTN": {
"defaultMessage": "Stream Chat"
},
"Bep/gA": {
"defaultMessage": "Private key"
},
"C81/uG": {
"defaultMessage": "Logout"
},
"D3idYv": {
"defaultMessage": "Settings"
},
"DZKuuP": {
"defaultMessage": "Logged in as"
},
"Dn82AL": {
"defaultMessage": "Live"
},
"ESyhzp": {
"defaultMessage": "Your comment for {name}"
},
"FjDlus": {
"defaultMessage": "You can always replace it with your own address later."
},
"Fodi9+": {
"defaultMessage": "Get paid by viewers"
},
"G/yZLu": {
"defaultMessage": "Remove"
},
"Gq6x9o": {
"defaultMessage": "Cover Image"
},
"H/bNs9": {
"defaultMessage": "Save this and keep it safe! If you lose this key, you won't be able to access your account ever again. Yep, it's that serious!"
},
"H5+NAX": {
"defaultMessage": "Balance"
},
"HAlOn1": {
"defaultMessage": "Name"
},
"I/TubD": {
"defaultMessage": "Select a goal..."
},
"I1kjHI": {
"defaultMessage": "Supports {markdown}"
},
"IJDKz3": {
"defaultMessage": "Zap amount in {currency}"
},
"INlWvJ": {
"defaultMessage": "OR"
},
"JEsxDw": {
"defaultMessage": "Uploading..."
},
"Jq3FDz": {
"defaultMessage": "Content"
},
"K3r6DQ": {
"defaultMessage": "Delete"
},
"K3uH1C": {
"defaultMessage": "offline"
},
"K7AkdL": {
"defaultMessage": "Show"
},
"KkIL3s": {
"defaultMessage": "No, I am under 18"
},
"LknBsU": {
"defaultMessage": "Stream Key"
},
"My6HwN": {
"defaultMessage": "Ok, it's safe"
},
"O2Cy6m": {
"defaultMessage": "Yes, I am over 18"
},
"OEW7yJ": {
"defaultMessage": "Zaps"
},
"OKhRC6": {
"defaultMessage": "Share"
},
"OWgHbg": {
"defaultMessage": "Edit card"
},
"Oxqtyf": {
"defaultMessage": "We hooked you up with a lightning wallet so you can get paid by viewers right away!"
},
"Q3au2v": {
"defaultMessage": "About {estimate}"
},
"QRHNuF": {
"defaultMessage": "What are we steaming today?"
},
"QRRCp0": {
"defaultMessage": "Stream URL"
},
"QceMQZ": {
"defaultMessage": "Goal: {amount}"
},
"Qe1MJu": {
"defaultMessage": "{name} with {amount}"
},
"RJOmzk": {
"defaultMessage": "I have read and agree with {provider}''s {terms}."
},
"RXQdxR": {
"defaultMessage": "Please login to write messages!"
},
"RrCui3": {
"defaultMessage": "Summary"
},
"TP/cMX": {
"defaultMessage": "Ended"
},
"TaTRKo": {
"defaultMessage": "Start Stream"
},
"TwyMau": {
"defaultMessage": "Account"
},
"UJBFYK": {
"defaultMessage": "Add Card"
},
"UfSot5": {
"defaultMessage": "Past Streams"
},
"VA/Z1S": {
"defaultMessage": "Hide"
},
"W9355R": {
"defaultMessage": "Unmute"
},
"X2PZ7D": {
"defaultMessage": "Create Goal"
},
"Z8ZOEY": {
"defaultMessage": "This method is insecure. We recommend using a {nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "You can change this later"
},
"acrOoz": {
"defaultMessage": "Continue"
},
"cPIKU2": {
"defaultMessage": "Following"
},
"cvAsEh": {
"defaultMessage": "Streamed on {date}"
},
"cyR7Kh": {
"defaultMessage": "Back"
},
"d5zWyh": {
"defaultMessage": "Test voice"
},
"dVD/AR": {
"defaultMessage": "Top Zappers"
},
"ebmhes": {
"defaultMessage": "Nostr Extension"
},
"f6biFA": {
"defaultMessage": "Oh, and you have {n} sats of free streaming on us! 💜"
},
"fBI91o": {
"defaultMessage": "Zap"
},
"fc2iho": {
"defaultMessage": "Add File"
},
"feZ/kG": {
"defaultMessage": "Login with Private Key (insecure)"
},
"hGQqkW": {
"defaultMessage": "Schedule"
},
"heyxZL": {
"defaultMessage": "Enable text to speech"
},
"hpl4BP": {
"defaultMessage": "Chat Widget"
},
"ieGrWo": {
"defaultMessage": "Follow"
},
"itPgxd": {
"defaultMessage": "Profile"
},
"izWS4J": {
"defaultMessage": "Unfollow"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "Save"
},
"k21gTS": {
"defaultMessage": "e.g. about me"
},
"kp0NPF": {
"defaultMessage": "Planned"
},
"lZpRMR": {
"defaultMessage": "Check here if this stream contains nudity or pornographic content."
},
"ljmS5P": {
"defaultMessage": "Endpoint"
},
"mnJYBQ": {
"defaultMessage": "Voice"
},
"mtNGwh": {
"defaultMessage": "A short description of the content"
},
"nBCvvJ": {
"defaultMessage": "Topup"
},
"nOaArs": {
"defaultMessage": "Setup Profile"
},
"nwA8Os": {
"defaultMessage": "Add card"
},
"oHPB8Q": {
"defaultMessage": "Zap {name}"
},
"oZrFyI": {
"defaultMessage": "Stream type should be HLS"
},
"pO/lPX": {
"defaultMessage": "Scheduled for {date}"
},
"r2Jjms": {
"defaultMessage": "Log In"
},
"rWBFZA": {
"defaultMessage": "Sexually explicit material ahead!"
},
"rbrahO": {
"defaultMessage": "Close"
},
"rfC1Zq": {
"defaultMessage": "Save card"
},
"rgsbu9": {
"defaultMessage": "Current Viewers"
},
"s5ksS7": {
"defaultMessage": "Image Link"
},
"s7V+5p": {
"defaultMessage": "Confirm your age"
},
"sInm1h": {
"defaultMessage": "Zap message"
},
"tG1ST3": {
"defaultMessage": "Incoming Zap"
},
"tM6fNW": {
"defaultMessage": "Amazing! Continue.."
},
"thsiMl": {
"defaultMessage": "terms and conditions"
},
"tzMNF3": {
"defaultMessage": "Status"
},
"u6uD94": {
"defaultMessage": "Create an Account"
},
"uYw2LD": {
"defaultMessage": "Stream"
},
"vrTOHJ": {
"defaultMessage": "{amount} sats"
},
"w0Xm2F": {
"defaultMessage": "Start typing"
},
"wCIL7o": {
"defaultMessage": "Broadcast on Nostr"
},
"wEQDC6": {
"defaultMessage": "Edit"
},
"wMKVFz": {
"defaultMessage": "Select voice..."
},
"wOy57k": {
"defaultMessage": "Add stream goal"
},
"wzWWzV": {
"defaultMessage": "Top zappers"
},
"x82IOl": {
"defaultMessage": "Mute"
},
"y867Vs": {
"defaultMessage": "Volume"
},
"yzKwBQ": {
"defaultMessage": "eg. nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "Zap Alert"
}
}

421
src/translations/zh_CN.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "图像"
},
"+AcVD+": {
"defaultMessage": "没有电子邮件,只是最棒!"
},
"+vVZ/G": {
"defaultMessage": "连接"
},
"/0TOL5": {
"defaultMessage": "金额"
},
"/EvlqN": {
"defaultMessage": "nostr 签名扩展"
},
"/GCoTA": {
"defaultMessage": "清除"
},
"04lmFi": {
"defaultMessage": "保存密钥"
},
"0GfNiL": {
"defaultMessage": "直播流打闪目标"
},
"0VV/sK": {
"defaultMessage": "目标"
},
"1EYCdR": {
"defaultMessage": "标签"
},
"1qsXCO": {
"defaultMessage": "例如 name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "添加"
},
"2CGh/0": {
"defaultMessage": "在线"
},
"3HwrQo": {
"defaultMessage": "打闪!"
},
"3adEeb": {
"defaultMessage": "{n} 观看用户"
},
"3df560": {
"defaultMessage": "使用私钥登录"
},
"47FYwb": {
"defaultMessage": "取消"
},
"4l69eO": {
"defaultMessage": "嗯,看起来你的闪电地址不对"
},
"4l6vz1": {
"defaultMessage": "复制"
},
"4uI538": {
"defaultMessage": "分辨率"
},
"5JcXdV": {
"defaultMessage": "创建帐户"
},
"5QYdPU": {
"defaultMessage": "开始时间"
},
"5kx+2v": {
"defaultMessage": "服务器 URL"
},
"6Z2pvJ": {
"defaultMessage": "直播流來源"
},
"6pr6hJ": {
"defaultMessage": "文字转语音的最小金额"
},
"8YT6ja": {
"defaultMessage": "输入要转为语音的文本"
},
"9WRlF4": {
"defaultMessage": "发送"
},
"9a9+ww": {
"defaultMessage": "标题"
},
"9anxhq": {
"defaultMessage": "开始"
},
"AIHaPH": {
"defaultMessage": "{person}已打闪{amount}聪"
},
"Atr2p4": {
"defaultMessage": "NSFW 内容"
},
"AukrPM": {
"defaultMessage": "没有可用的观看用户数据"
},
"AyGauy": {
"defaultMessage": "登录"
},
"BGxpTN": {
"defaultMessage": "直播流聊天室"
},
"Bep/gA": {
"defaultMessage": "私钥"
},
"C81/uG": {
"defaultMessage": "登出"
},
"D3idYv": {
"defaultMessage": "设置"
},
"DZKuuP": {
"defaultMessage": "已登录为"
},
"Dn82AL": {
"defaultMessage": "在线"
},
"ESyhzp": {
"defaultMessage": "你为{name}的留言"
},
"FjDlus": {
"defaultMessage": "你始终可以用自己的地址替换它。"
},
"Fodi9+": {
"defaultMessage": "获得观众付款"
},
"G/yZLu": {
"defaultMessage": "移除"
},
"Gq6x9o": {
"defaultMessage": "封面图像"
},
"H/bNs9": {
"defaultMessage": "请将它安全保存!如果你丢失了此密钥,你将无法无法再次访问你的帐户。对,很严肃!"
},
"H5+NAX": {
"defaultMessage": "余额"
},
"HAlOn1": {
"defaultMessage": "名称"
},
"I/TubD": {
"defaultMessage": "选择目标..."
},
"I1kjHI": {
"defaultMessage": "支持 {markdown}"
},
"IJDKz3": {
"defaultMessage": "打闪金额{currency}"
},
"INlWvJ": {
"defaultMessage": "或"
},
"JEsxDw": {
"defaultMessage": "正在上传..."
},
"Jq3FDz": {
"defaultMessage": "内容"
},
"K3r6DQ": {
"defaultMessage": "删除"
},
"K3uH1C": {
"defaultMessage": "离线"
},
"K7AkdL": {
"defaultMessage": "显示"
},
"KkIL3s": {
"defaultMessage": "不我未满18岁"
},
"LknBsU": {
"defaultMessage": "直播流密钥"
},
"My6HwN": {
"defaultMessage": "好,是安全的"
},
"O2Cy6m": {
"defaultMessage": "是的我已满18岁"
},
"OEW7yJ": {
"defaultMessage": "打闪"
},
"OKhRC6": {
"defaultMessage": "分享"
},
"OWgHbg": {
"defaultMessage": "编辑卡片"
},
"Oxqtyf": {
"defaultMessage": "我们已经为你设置了一个闪电钱包,因此你立即可以开始收取观众的付款!"
},
"Q3au2v": {
"defaultMessage": "大约{estimate}"
},
"QRHNuF": {
"defaultMessage": "我们今天直播些什么?"
},
"QRRCp0": {
"defaultMessage": "直播流链接"
},
"QceMQZ": {
"defaultMessage": "目标:{amount}"
},
"Qe1MJu": {
"defaultMessage": "{amount}來自{name}"
},
"RJOmzk": {
"defaultMessage": "我已阅读并同意{provider}的{terms}。"
},
"RXQdxR": {
"defaultMessage": "请登录以撰写消息!"
},
"RrCui3": {
"defaultMessage": "概要"
},
"TP/cMX": {
"defaultMessage": "已结束"
},
"TaTRKo": {
"defaultMessage": "开始直播"
},
"TwyMau": {
"defaultMessage": "帐户"
},
"UJBFYK": {
"defaultMessage": "添加卡片"
},
"UfSot5": {
"defaultMessage": "过去的直播流"
},
"VA/Z1S": {
"defaultMessage": "隐藏"
},
"W9355R": {
"defaultMessage": "解除静音"
},
"X2PZ7D": {
"defaultMessage": "创建目标"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "这个方式不安全。我们建议使用{nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "你可以稍后更改它"
},
"acrOoz": {
"defaultMessage": "继续"
},
"cPIKU2": {
"defaultMessage": "已关注"
},
"cvAsEh": {
"defaultMessage": "已于{date}直播"
},
"cyR7Kh": {
"defaultMessage": "返回"
},
"d5zWyh": {
"defaultMessage": "测试语音"
},
"dVD/AR": {
"defaultMessage": "最高打闪用户"
},
"ebmhes": {
"defaultMessage": "Nostr 扩展"
},
"f6biFA": {
"defaultMessage": "哦,我们还为你提供了{n}聪的免费直播!💜"
},
"fBI91o": {
"defaultMessage": "打闪"
},
"fc2iho": {
"defaultMessage": "新增文件"
},
"feZ/kG": {
"defaultMessage": "使用私钥登录 (不安全)"
},
"hGQqkW": {
"defaultMessage": "时间表"
},
"heyxZL": {
"defaultMessage": "启用文字转语音"
},
"hpl4BP": {
"defaultMessage": "聊天小部件"
},
"ieGrWo": {
"defaultMessage": "关注"
},
"itPgxd": {
"defaultMessage": "个人档案"
},
"izWS4J": {
"defaultMessage": "取消关注"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "保存"
},
"k21gTS": {
"defaultMessage": "例如:关于我"
},
"kp0NPF": {
"defaultMessage": "已计划"
},
"lZpRMR": {
"defaultMessage": "如果该流含有裸体或色情内容,请选择此选项。"
},
"ljmS5P": {
"defaultMessage": "端点"
},
"mnJYBQ": {
"defaultMessage": "语音"
},
"mtNGwh": {
"defaultMessage": "内容的简短描述"
},
"nBCvvJ": {
"defaultMessage": "充值"
},
"nOaArs": {
"defaultMessage": "设置个人档案"
},
"nwA8Os": {
"defaultMessage": "添加卡片"
},
"oHPB8Q": {
"defaultMessage": "打闪 {name}"
},
"oZrFyI": {
"defaultMessage": "直播流类型应该是 HLS"
},
"pO/lPX": {
"defaultMessage": "预定于{date}"
},
"r2Jjms": {
"defaultMessage": "登录"
},
"rWBFZA": {
"defaultMessage": "前方有色情内容!"
},
"rbrahO": {
"defaultMessage": "关闭"
},
"rfC1Zq": {
"defaultMessage": "保存卡片"
},
"rgsbu9": {
"defaultMessage": "当前观看用户"
},
"s5ksS7": {
"defaultMessage": "图像链接"
},
"s7V+5p": {
"defaultMessage": "确认你的年龄"
},
"sInm1h": {
"defaultMessage": "打闪消息"
},
"tG1ST3": {
"defaultMessage": "传入打闪"
},
"tM6fNW": {
"defaultMessage": "太棒了!继续.."
},
"thsiMl": {
"defaultMessage": "使用条款"
},
"tzMNF3": {
"defaultMessage": "状态"
},
"u6uD94": {
"defaultMessage": "创建帐户"
},
"uYw2LD": {
"defaultMessage": "直播"
},
"vrTOHJ": {
"defaultMessage": "{amount} 聪"
},
"w0Xm2F": {
"defaultMessage": "开始键入"
},
"wCIL7o": {
"defaultMessage": "在 Nostr 上广播"
},
"wEQDC6": {
"defaultMessage": "编辑"
},
"wMKVFz": {
"defaultMessage": "选择语音..."
},
"wOy57k": {
"defaultMessage": "添加直播流目标"
},
"wzWWzV": {
"defaultMessage": "最高打闪用户"
},
"x82IOl": {
"defaultMessage": "静音"
},
"y867Vs": {
"defaultMessage": "音量"
},
"yzKwBQ": {
"defaultMessage": "例如 nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "打闪提示"
}
}

421
src/translations/zh_TW.json Normal file
View File

@ -0,0 +1,421 @@
{
"+0zv6g": {
"defaultMessage": "圖像"
},
"+AcVD+": {
"defaultMessage": "沒有電子郵件,只有最棒!"
},
"+vVZ/G": {
"defaultMessage": "連接"
},
"/0TOL5": {
"defaultMessage": "金額"
},
"/EvlqN": {
"defaultMessage": "nostr 簽名擴充功能"
},
"/GCoTA": {
"defaultMessage": "清除"
},
"04lmFi": {
"defaultMessage": "保存密鑰"
},
"0GfNiL": {
"defaultMessage": "直播流打閃目標"
},
"0VV/sK": {
"defaultMessage": "目標"
},
"1EYCdR": {
"defaultMessage": "標籤"
},
"1qsXCO": {
"defaultMessage": "例如 name@wallet.com"
},
"2/2yg+": {
"defaultMessage": "添加"
},
"2CGh/0": {
"defaultMessage": "在線"
},
"3HwrQo": {
"defaultMessage": "打閃!"
},
"3adEeb": {
"defaultMessage": "{n} 觀眾"
},
"3df560": {
"defaultMessage": "使用私鑰登錄"
},
"47FYwb": {
"defaultMessage": "取消"
},
"4l69eO": {
"defaultMessage": "嗯,看起來你的閃電地址不對"
},
"4l6vz1": {
"defaultMessage": "複製"
},
"4uI538": {
"defaultMessage": "解析度"
},
"5JcXdV": {
"defaultMessage": "創建帳戶"
},
"5QYdPU": {
"defaultMessage": "開始時間"
},
"5kx+2v": {
"defaultMessage": "伺服器 URL"
},
"6Z2pvJ": {
"defaultMessage": "直播流來源"
},
"6pr6hJ": {
"defaultMessage": "文字轉語音的最低金額"
},
"8YT6ja": {
"defaultMessage": "輸入要轉為語音的文本"
},
"9WRlF4": {
"defaultMessage": "發送"
},
"9a9+ww": {
"defaultMessage": "標題"
},
"9anxhq": {
"defaultMessage": "開始"
},
"AIHaPH": {
"defaultMessage": "{person}已打閃{amount}聰"
},
"Atr2p4": {
"defaultMessage": "NSFW 内容"
},
"AukrPM": {
"defaultMessage": "沒有可用的觀看用戶數據"
},
"AyGauy": {
"defaultMessage": "登錄"
},
"BGxpTN": {
"defaultMessage": "直播流聊天室"
},
"Bep/gA": {
"defaultMessage": "私鑰"
},
"C81/uG": {
"defaultMessage": "登出"
},
"D3idYv": {
"defaultMessage": "設置"
},
"DZKuuP": {
"defaultMessage": "已登錄為"
},
"Dn82AL": {
"defaultMessage": "在線"
},
"ESyhzp": {
"defaultMessage": "你為{name}的留言"
},
"FjDlus": {
"defaultMessage": "你始終可以用你自己的地址替換它。"
},
"Fodi9+": {
"defaultMessage": "獲得觀眾付款"
},
"G/yZLu": {
"defaultMessage": "移除"
},
"Gq6x9o": {
"defaultMessage": "封面圖片"
},
"H/bNs9": {
"defaultMessage": "請將它安全保存!如果你丟失了此密鑰,你將無法再次訪問你的帳戶。對,很嚴肅!"
},
"H5+NAX": {
"defaultMessage": "餘額"
},
"HAlOn1": {
"defaultMessage": "名稱"
},
"I/TubD": {
"defaultMessage": "選擇目標..."
},
"I1kjHI": {
"defaultMessage": "支持{markdown}"
},
"IJDKz3": {
"defaultMessage": "打閃金額{currency}"
},
"INlWvJ": {
"defaultMessage": "或"
},
"JEsxDw": {
"defaultMessage": "正在上傳..."
},
"Jq3FDz": {
"defaultMessage": "內容"
},
"K3r6DQ": {
"defaultMessage": "刪除"
},
"K3uH1C": {
"defaultMessage": "離線"
},
"K7AkdL": {
"defaultMessage": "顯示"
},
"KkIL3s": {
"defaultMessage": "不我未滿18歲"
},
"LknBsU": {
"defaultMessage": "直播流密鑰"
},
"My6HwN": {
"defaultMessage": "好,是安全的"
},
"O2Cy6m": {
"defaultMessage": "是的我已滿18歲"
},
"OEW7yJ": {
"defaultMessage": "打閃"
},
"OKhRC6": {
"defaultMessage": "分享"
},
"OWgHbg": {
"defaultMessage": "編輯卡片"
},
"Oxqtyf": {
"defaultMessage": "我們已經為你設置了一個閃電錢包,因此你立即可以開始收取觀眾的付款!"
},
"Q3au2v": {
"defaultMessage": "大約{estimate}"
},
"QRHNuF": {
"defaultMessage": "我們今天直播些什麼?"
},
"QRRCp0": {
"defaultMessage": "直播流 URL"
},
"QceMQZ": {
"defaultMessage": "目標:{amount}"
},
"Qe1MJu": {
"defaultMessage": "{amount}來自{name}"
},
"RJOmzk": {
"defaultMessage": "我已閱讀並同意{provider}的{terms}。"
},
"RXQdxR": {
"defaultMessage": "請登錄以撰寫消息!"
},
"RrCui3": {
"defaultMessage": "概要"
},
"TP/cMX": {
"defaultMessage": "已結束"
},
"TaTRKo": {
"defaultMessage": "開始直播"
},
"TwyMau": {
"defaultMessage": "帳戶"
},
"UJBFYK": {
"defaultMessage": "新增卡片"
},
"UfSot5": {
"defaultMessage": "過去的直播流"
},
"VA/Z1S": {
"defaultMessage": "隱藏"
},
"W9355R": {
"defaultMessage": "解除静音"
},
"X2PZ7D": {
"defaultMessage": "創建目標"
},
"YPh5Nq": {
"defaultMessage": "@ {rate}",
"description": "Showing zap amount in USD @ rate"
},
"Z8ZOEY": {
"defaultMessage": "這個方式不安全。我們建議使用{nostrlink}"
},
"ZmqxZs": {
"defaultMessage": "你可以稍後更改它"
},
"acrOoz": {
"defaultMessage": "繼續"
},
"cPIKU2": {
"defaultMessage": "已關注"
},
"cvAsEh": {
"defaultMessage": "已於{date}直播"
},
"cyR7Kh": {
"defaultMessage": "返回"
},
"d5zWyh": {
"defaultMessage": "測試語音"
},
"dVD/AR": {
"defaultMessage": "最高打閃用戶"
},
"ebmhes": {
"defaultMessage": "Nostr 擴充功能"
},
"f6biFA": {
"defaultMessage": "哦,我們還為你提供了{n}聰的免費直播!💜"
},
"fBI91o": {
"defaultMessage": "打閃"
},
"fc2iho": {
"defaultMessage": "新增檔案"
},
"feZ/kG": {
"defaultMessage": "使用私鑰登錄(不安全)"
},
"hGQqkW": {
"defaultMessage": "時間表"
},
"heyxZL": {
"defaultMessage": "開啟文字轉語音"
},
"hpl4BP": {
"defaultMessage": "聊天小部件"
},
"ieGrWo": {
"defaultMessage": "關注"
},
"itPgxd": {
"defaultMessage": "個人檔案"
},
"izWS4J": {
"defaultMessage": "取消關注"
},
"jr4+vD": {
"defaultMessage": "Markdown"
},
"jvo0vs": {
"defaultMessage": "保存"
},
"k21gTS": {
"defaultMessage": "例如:關於我"
},
"kp0NPF": {
"defaultMessage": "已計畫"
},
"lZpRMR": {
"defaultMessage": "如果該流含有裸體或色情內容,請選擇此選項。"
},
"ljmS5P": {
"defaultMessage": "端點"
},
"mnJYBQ": {
"defaultMessage": "語音"
},
"mtNGwh": {
"defaultMessage": "內容的簡短描述"
},
"nBCvvJ": {
"defaultMessage": "充值"
},
"nOaArs": {
"defaultMessage": "設置個人檔案"
},
"nwA8Os": {
"defaultMessage": "新增卡片"
},
"oHPB8Q": {
"defaultMessage": "打閃{name}"
},
"oZrFyI": {
"defaultMessage": "直播流類型應該是 HLS"
},
"pO/lPX": {
"defaultMessage": "預定於{date}"
},
"r2Jjms": {
"defaultMessage": "登錄"
},
"rWBFZA": {
"defaultMessage": "前方有色情內容!"
},
"rbrahO": {
"defaultMessage": "關閉"
},
"rfC1Zq": {
"defaultMessage": "保存卡片"
},
"rgsbu9": {
"defaultMessage": "目前觀看用戶"
},
"s5ksS7": {
"defaultMessage": "圖像鏈接"
},
"s7V+5p": {
"defaultMessage": "確認你的年齡"
},
"sInm1h": {
"defaultMessage": "打闪消息"
},
"tG1ST3": {
"defaultMessage": "傳入打閃"
},
"tM6fNW": {
"defaultMessage": "太棒了!繼續.."
},
"thsiMl": {
"defaultMessage": "使用條款"
},
"tzMNF3": {
"defaultMessage": "狀態"
},
"u6uD94": {
"defaultMessage": "創建帳户"
},
"uYw2LD": {
"defaultMessage": "直播"
},
"vrTOHJ": {
"defaultMessage": "{amount} 聰"
},
"w0Xm2F": {
"defaultMessage": "開始輸入"
},
"wCIL7o": {
"defaultMessage": "在 Nostr 上廣播"
},
"wEQDC6": {
"defaultMessage": "編輯"
},
"wMKVFz": {
"defaultMessage": "選擇語音..."
},
"wOy57k": {
"defaultMessage": "添加直播流目標"
},
"wzWWzV": {
"defaultMessage": "最高打閃用戶"
},
"x82IOl": {
"defaultMessage": "靜音"
},
"y867Vs": {
"defaultMessage": "音量"
},
"yzKwBQ": {
"defaultMessage": "例如 nsec1xyz"
},
"zVDHAu": {
"defaultMessage": "打閃提示"
}
}

View File

@ -1,8 +1,9 @@
import { NostrEvent, NostrPrefix, TaggedNostrEvent, encodeTLV, parseNostrLink } from "@snort/system";
import { NostrEvent, NostrPrefix, TaggedNostrEvent, createNostrLink, encodeTLV } from "@snort/system";
import * as utils from "@noble/curves/abstract/utils";
import { bech32 } from "@scure/base";
import type { Tag, Tags } from "types";
import { LIVE_STREAM } from "const";
import { unwrap } from "@snort/shared";
export function toAddress(e: NostrEvent): string {
if (e.kind && e.kind >= 30000 && e.kind <= 40000) {
@ -76,11 +77,6 @@ export function eventLink(ev: NostrEvent | TaggedNostrEvent) {
}
}
export function createNostrLink(ev?: NostrEvent) {
if (!ev) return;
return parseNostrLink(eventLink(ev));
}
export function getHost(ev?: NostrEvent) {
return ev?.tags.find(a => a[0] === "p" && a[3] === "host")?.[1] ?? ev?.pubkey ?? "";
}
@ -114,3 +110,11 @@ export function getEventFromLocationState(state: unknown | undefined | null) {
? (state as NostrEvent)
: undefined;
}
export function eventToLink(ev: NostrEvent) {
if (ev.kind >= 30_000 && ev.kind < 40_000) {
const dTag = unwrap(findTag(ev, "d"));
return createNostrLink(NostrPrefix.Address, dTag, undefined, ev.kind, ev.pubkey);
}
return createNostrLink(NostrPrefix.Event, ev.id, undefined, ev.kind, ev.pubkey);
}

View File

@ -62,9 +62,11 @@ const config = {
__XXX: process.env["__XXX"] || JSON.stringify(false),
__XXX_HOST: JSON.stringify("https://xxzap.com"),
}),
new WorkboxPlugin.InjectManifest({
swSrc: "./src/service-worker.ts",
}),
isProduction
? new WorkboxPlugin.InjectManifest({
swSrc: "./src/service-worker.ts",
})
: false,
],
module: {
rules: [
@ -73,6 +75,15 @@ const config = {
exclude: /@babel(?:\/|\\{1,2})runtime/,
test: /\.(js|mjs|jsx|ts|tsx|css)$/,
loader: require.resolve("source-map-loader"),
options: {
filterSourceMappingUrl: (url, resourcePath) => {
// disable warning for missing @scure-bip39 sourcemaps
if (/.*\/.yarn\/cache\/@scure-bip39.*/.test(resourcePath)) {
return false;
}
return true;
},
},
},
{
test: /\.tsx?$/i,

247
yarn.lock
View File

@ -1601,6 +1601,39 @@ __metadata:
languageName: node
linkType: hard
"@getalby/bitcoin-connect-react@npm:^1.1.0":
version: 1.1.0
resolution: "@getalby/bitcoin-connect-react@npm:1.1.0"
dependencies:
"@getalby/bitcoin-connect": ^1.1.0
peerDependencies:
react: ^18.2.0
checksum: 2758212332525f55a5233180f332d7e0e29095157b028fc256500e435b64d8df10e2fe86089b312cdbab8f378b9b38ebbd6acfed7b504e98eba2dff10428216e
languageName: node
linkType: hard
"@getalby/bitcoin-connect@npm:^1.1.0":
version: 1.1.2
resolution: "@getalby/bitcoin-connect@npm:1.1.2"
dependencies:
"@getalby/sdk": ^2.4.0
lit: ^2.2.4
zustand: ^4.4.1
checksum: 07077842e70bf8baeb1c2718be1b0fa3c4d6851124651157cb80494f6dce625440b5d456cfe1b38208c12998c93d5012aa385a5ff0ecc806bcb211a8fea8f657
languageName: node
linkType: hard
"@getalby/sdk@npm:^2.4.0":
version: 2.4.0
resolution: "@getalby/sdk@npm:2.4.0"
dependencies:
crypto-js: ^4.1.1
events: ^3.3.0
nostr-tools: 1.13.1
checksum: 70441646784a51f9664a5e929c1db30f62e54907ec637ce9874f43df9064096a0b348ec11bed11f1dcfbd3920eda684f4a7c1ab1c81fc5eecf17495a9d931a5e
languageName: node
linkType: hard
"@humanwhocodes/config-array@npm:^0.11.10":
version: 0.11.10
resolution: "@humanwhocodes/config-array@npm:0.11.10"
@ -1738,6 +1771,31 @@ __metadata:
languageName: node
linkType: hard
"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0":
version: 1.1.1
resolution: "@lit-labs/ssr-dom-shim@npm:1.1.1"
checksum: 7a7add78e3ee570a7b987b9bf85e700b20d35d31c8b54cf4c8b2e3c8458ed4e2b0ff328706e5be7887f0ca8a02878c186e76609defb78f0d1b3c0e6b47c9f6ef
languageName: node
linkType: hard
"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0":
version: 1.6.3
resolution: "@lit/reactive-element@npm:1.6.3"
dependencies:
"@lit-labs/ssr-dom-shim": ^1.0.0
checksum: 79b58631c38effeabad090070324431da8a22cf0ff665f5e4de35e4d791f984742b3d340c9c7fce996d1124a8da95febc582471b4c237236c770b1300b56ef6e
languageName: node
linkType: hard
"@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0":
version: 1.1.0
resolution: "@noble/curves@npm:1.1.0"
dependencies:
"@noble/hashes": 1.3.1
checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5
languageName: node
linkType: hard
"@noble/curves@npm:^1.1.0, @noble/curves@npm:^1.2.0":
version: 1.2.0
resolution: "@noble/curves@npm:1.2.0"
@ -1747,7 +1805,14 @@ __metadata:
languageName: node
linkType: hard
"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2":
"@noble/hashes@npm:1.3.1":
version: 1.3.1
resolution: "@noble/hashes@npm:1.3.1"
checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1
languageName: node
linkType: hard
"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1":
version: 1.3.2
resolution: "@noble/hashes@npm:1.3.2"
checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474
@ -2379,13 +2444,34 @@ __metadata:
languageName: node
linkType: hard
"@scure/base@npm:^1.1.1, @scure/base@npm:^1.1.2":
"@scure/base@npm:^1.1.1, @scure/base@npm:^1.1.2, @scure/base@npm:~1.1.0":
version: 1.1.2
resolution: "@scure/base@npm:1.1.2"
checksum: f666b09dbd62ecb5fe6d0e7a629c8a86a972a47dc4f4555ebbbd7b09782b10a5f894fed9c3b8c74fd683b1588c064df079a44e9f695c075ccd98c30a8d3e91f7
languageName: node
linkType: hard
"@scure/bip32@npm:1.3.1":
version: 1.3.1
resolution: "@scure/bip32@npm:1.3.1"
dependencies:
"@noble/curves": ~1.1.0
"@noble/hashes": ~1.3.1
"@scure/base": ~1.1.0
checksum: 394d65f77a40651eba21a5096da0f4233c3b50d422864751d373fcf142eeedb94a1149f9ab1dbb078086dab2d0bc27e2b1afec8321bf22d4403c7df2fea5bfe2
languageName: node
linkType: hard
"@scure/bip39@npm:1.2.1":
version: 1.2.1
resolution: "@scure/bip39@npm:1.2.1"
dependencies:
"@noble/hashes": ~1.3.0
"@scure/base": ~1.1.0
checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa
languageName: node
linkType: hard
"@sinclair/typebox@npm:^0.27.8":
version: 0.27.8
resolution: "@sinclair/typebox@npm:0.27.8"
@ -2393,44 +2479,44 @@ __metadata:
languageName: node
linkType: hard
"@snort/shared@npm:^1.0.4":
version: 1.0.4
resolution: "@snort/shared@npm:1.0.4"
dependencies:
"@noble/curves": ^1.1.0
"@noble/hashes": ^1.3.1
"@scure/base": ^1.1.1
debug: ^4.3.4
dexie: ^3.2.4
light-bolt11-decoder: ^3.0.0
checksum: d0c481e1f29f72f3bb415977f9de79fc3b9d7c71004ca482fac139518256583fc5af57eded329703fe7ebc15d7bf306aace98db24f6317bc88161c28556b9f2f
languageName: node
linkType: hard
"@snort/system-react@npm:^1.0.12":
version: 1.0.12
resolution: "@snort/system-react@npm:1.0.12"
dependencies:
"@snort/shared": ^1.0.4
"@snort/system": ^1.0.17
react: ^18.2.0
checksum: 3750f76de273a63493a8d23bb911a49fea17500e6224b643956ecfbf2e09e102ad6515a64739115538ec3e5cc97d4d44f36a38d37d0df862d99e9123a3198d57
languageName: node
linkType: hard
"@snort/system@npm:^1.0.17":
version: 1.0.17
resolution: "@snort/system@npm:1.0.17"
"@snort/shared@npm:^1.0.5":
version: 1.0.5
resolution: "@snort/shared@npm:1.0.5"
dependencies:
"@noble/curves": ^1.2.0
"@noble/hashes": ^1.3.2
"@scure/base": ^1.1.2
"@snort/shared": ^1.0.4
debug: ^4.3.4
dexie: ^3.2.4
light-bolt11-decoder: ^3.0.0
checksum: 25ada095ecc059cbd0a1ff79d2372484aa4171ec8d697b880ad924a353d54290c5dbc9457ef52aac512bf1984d787a3cfaf35610b4d9bc968fe327da35fd7c1c
languageName: node
linkType: hard
"@snort/system-react@npm:^1.0.13":
version: 1.0.13
resolution: "@snort/system-react@npm:1.0.13"
dependencies:
"@snort/shared": ^1.0.5
"@snort/system": ^1.0.18
react: ^18.2.0
checksum: 0d3cbc1291faed6cee2c12706932e84fd3c5f8ff91d3f03f92f493fe58846cd7c5691fec3750aa0579f6ae46e0ab57a67c055a417540379c435d91db9887f794
languageName: node
linkType: hard
"@snort/system@npm:^1.0.18":
version: 1.0.18
resolution: "@snort/system@npm:1.0.18"
dependencies:
"@noble/curves": ^1.2.0
"@noble/hashes": ^1.3.2
"@scure/base": ^1.1.2
"@snort/shared": ^1.0.5
"@stablelib/xchacha20": ^1.0.1
debug: ^4.3.4
dexie: ^3.2.4
uuid: ^9.0.0
checksum: 20bc70d72b32da3e4f0a285b23ae08b408cec25318115fa85f8048c30e62dab93da0e5765a2c05f3e8c3d1f8ae5d4c3008343da01d2764b5bc68981af895116c
checksum: 6539126720e9cf3bee139eaeec96051df5b3ab082c5a1e8b9183a85bb3b51654076826e1ef14e85ecc1ffd5fed4809075756f0d912f5a5d51c37d785922f038f
languageName: node
linkType: hard
@ -4316,6 +4402,13 @@ __metadata:
languageName: node
linkType: hard
"crypto-js@npm:^4.1.1":
version: 4.1.1
resolution: "crypto-js@npm:4.1.1"
checksum: b3747c12ee3a7632fab3b3e171ea50f78b182545f0714f6d3e7e2858385f0f4101a15f2517e033802ce9d12ba50a391575ff4638c9de3dd9b2c4bc47768d5425
languageName: node
linkType: hard
"crypto-random-string@npm:^2.0.0":
version: 2.0.0
resolution: "crypto-random-string@npm:2.0.0"
@ -5256,7 +5349,7 @@ __metadata:
languageName: node
linkType: hard
"events@npm:^3.2.0":
"events@npm:^3.2.0, events@npm:^3.3.0":
version: 3.3.0
resolution: "events@npm:3.3.0"
checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780
@ -5487,6 +5580,13 @@ __metadata:
languageName: node
linkType: hard
"flag-icons@npm:^6.11.0":
version: 6.11.0
resolution: "flag-icons@npm:6.11.0"
checksum: 859c4dfa104bbaa3bf49484764e1d9144d644c8acfff581591e925733d5b4731226be065b91ccac4b0e30a49fda6ba3c1468af4d5e35642dcefd03f468040efe
languageName: node
linkType: hard
"flat-cache@npm:^3.0.4":
version: 3.1.0
resolution: "flat-cache@npm:3.1.0"
@ -6935,6 +7035,37 @@ __metadata:
languageName: node
linkType: hard
"lit-element@npm:^3.3.0":
version: 3.3.3
resolution: "lit-element@npm:3.3.3"
dependencies:
"@lit-labs/ssr-dom-shim": ^1.1.0
"@lit/reactive-element": ^1.3.0
lit-html: ^2.8.0
checksum: 29a596fa556e231cce7246ca3e5687ad238f299b0cb374a0934d5e6fe9adf1436e031d4fbd21b280aabfc0e21a66e6c4b52da558a908df2566d09d960f3ca93d
languageName: node
linkType: hard
"lit-html@npm:^2.8.0":
version: 2.8.0
resolution: "lit-html@npm:2.8.0"
dependencies:
"@types/trusted-types": ^2.0.2
checksum: 2d70df07248bcb2f502a3afb1e91d260735024fa669669ffb1417575aa39c3092779725ac1b90f5f39e4ce78c63f431f51176bc67f532389f0285a6991573255
languageName: node
linkType: hard
"lit@npm:^2.2.4":
version: 2.8.0
resolution: "lit@npm:2.8.0"
dependencies:
"@lit/reactive-element": ^1.6.0
lit-element: ^3.3.0
lit-html: ^2.8.0
checksum: 2480e733f7d022d3ecba91abc58a20968f0ca8f5fa30b3341ecf4bcf4845e674ad27b721a5ae53529cafc6ca603c015b80d0979ceb7a711e268ef20bb6bc7527
languageName: node
linkType: hard
"loader-runner@npm:^4.2.0":
version: 4.3.0
resolution: "loader-runner@npm:4.3.0"
@ -7795,6 +7926,19 @@ __metadata:
languageName: node
linkType: hard
"nostr-tools@npm:1.13.1":
version: 1.13.1
resolution: "nostr-tools@npm:1.13.1"
dependencies:
"@noble/curves": 1.1.0
"@noble/hashes": 1.3.1
"@scure/base": 1.1.1
"@scure/bip32": 1.3.1
"@scure/bip39": 1.2.1
checksum: 49695f94b5d399a29c9d7173fa2927c24247e365a7b17586434c4b442b99b6a35b6b015c01736b12fcaaba5b88884e25c1af1367880111403ea0718db85d5467
languageName: node
linkType: hard
"npm-run-path@npm:^4.0.1":
version: 4.0.1
resolution: "npm-run-path@npm:4.0.1"
@ -9781,6 +9925,7 @@ __metadata:
"@emoji-mart/react": ^1.1.1
"@formatjs/cli": ^6.1.3
"@formatjs/ts-transformer": ^3.13.3
"@getalby/bitcoin-connect-react": ^1.1.0
"@noble/curves": ^1.1.0
"@noble/hashes": ^1.3.1
"@radix-ui/react-collapsible": ^1.0.3
@ -9790,9 +9935,9 @@ __metadata:
"@radix-ui/react-toggle": ^1.0.3
"@react-hook/resize-observer": ^1.2.6
"@scure/base": ^1.1.1
"@snort/shared": ^1.0.4
"@snort/system": ^1.0.17
"@snort/system-react": ^1.0.12
"@snort/shared": ^1.0.5
"@snort/system": ^1.0.18
"@snort/system-react": ^1.0.13
"@szhsin/react-menu": ^4.0.2
"@testing-library/dom": ^9.3.1
"@testing-library/jest-dom": ^5.14.1
@ -9817,6 +9962,7 @@ __metadata:
emoji-mart: ^5.5.2
eslint: ^8.48.0
eslint-webpack-plugin: ^4.0.1
flag-icons: ^6.11.0
hls.js: ^1.4.6
html-webpack-plugin: ^5.5.1
lodash: ^4.17.21
@ -10579,6 +10725,15 @@ __metadata:
languageName: node
linkType: hard
"use-sync-external-store@npm:1.2.0":
version: 1.2.0
resolution: "use-sync-external-store@npm:1.2.0"
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a
languageName: node
linkType: hard
"usehooks-ts@npm:^2.9.1":
version: 2.9.1
resolution: "usehooks-ts@npm:2.9.1"
@ -11276,3 +11431,23 @@ __metadata:
checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801
languageName: node
linkType: hard
"zustand@npm:^4.4.1":
version: 4.4.1
resolution: "zustand@npm:4.4.1"
dependencies:
use-sync-external-store: 1.2.0
peerDependencies:
"@types/react": ">=16.8"
immer: ">=9.0"
react: ">=16.8"
peerDependenciesMeta:
"@types/react":
optional: true
immer:
optional: true
react:
optional: true
checksum: 80acd0fbf633782996642802c8692bbb80ae5c80a8dff4c501b88250acd5ccd468fbc6398bdce198475a25e3839c91385b81da921274f33ffb5c2d08c3eab400
languageName: node
linkType: hard