@streamplace/components 0.9.7 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/badges/live.png +0 -0
- package/assets/badges/live_2x.png +0 -0
- package/assets/badges/mod.png +0 -0
- package/assets/badges/mod_2x.png +0 -0
- package/assets/badges/vip.png +0 -0
- package/assets/badges/vip_2x.png +0 -0
- package/dist/components/chat/badge.d.ts +10 -0
- package/dist/components/chat/badge.d.ts.map +1 -0
- package/dist/components/chat/badge.js +29 -0
- package/dist/components/chat/badge.js.map +1 -0
- package/dist/components/chat/chat-box.d.ts +5 -1
- package/dist/components/chat/chat-box.d.ts.map +1 -1
- package/dist/components/chat/chat-box.js +55 -50
- package/dist/components/chat/chat-box.js.map +1 -1
- package/dist/components/chat/chat-message.d.ts.map +1 -1
- package/dist/components/chat/chat-message.js +9 -11
- package/dist/components/chat/chat-message.js.map +1 -1
- package/dist/components/chat/chat.d.ts.map +1 -1
- package/dist/components/chat/chat.js +37 -43
- package/dist/components/chat/chat.js.map +1 -1
- package/dist/components/chat/emoji-suggestions.d.ts +7 -18
- package/dist/components/chat/emoji-suggestions.d.ts.map +1 -1
- package/dist/components/chat/emoji-suggestions.js +6 -2
- package/dist/components/chat/emoji-suggestions.js.map +1 -1
- package/dist/components/chat/system-message.d.ts.map +1 -1
- package/dist/components/chat/system-message.js +9 -1
- package/dist/components/chat/system-message.js.map +1 -1
- package/dist/components/chat/teleport-modal.d.ts +9 -0
- package/dist/components/chat/teleport-modal.d.ts.map +1 -0
- package/dist/components/chat/teleport-modal.js +148 -0
- package/dist/components/chat/teleport-modal.js.map +1 -0
- package/dist/components/chat/user-profile-card.d.ts +12 -0
- package/dist/components/chat/user-profile-card.d.ts.map +1 -0
- package/dist/components/chat/user-profile-card.js +135 -0
- package/dist/components/chat/user-profile-card.js.map +1 -0
- package/dist/components/dashboard/chat-panel.d.ts +3 -1
- package/dist/components/dashboard/chat-panel.d.ts.map +1 -1
- package/dist/components/dashboard/chat-panel.js +2 -2
- package/dist/components/dashboard/chat-panel.js.map +1 -1
- package/dist/components/dashboard/header.d.ts +2 -3
- package/dist/components/dashboard/header.d.ts.map +1 -1
- package/dist/components/dashboard/header.js +6 -2
- package/dist/components/dashboard/header.js.map +1 -1
- package/dist/components/dashboard/information-widget.d.ts.map +1 -1
- package/dist/components/dashboard/information-widget.js +15 -12
- package/dist/components/dashboard/information-widget.js.map +1 -1
- package/dist/components/mobile-player/fullscreen.d.ts.map +1 -1
- package/dist/components/mobile-player/fullscreen.js +2 -1
- package/dist/components/mobile-player/fullscreen.js.map +1 -1
- package/dist/components/mobile-player/fullscreen.native.d.ts.map +1 -1
- package/dist/components/mobile-player/fullscreen.native.js +3 -2
- package/dist/components/mobile-player/fullscreen.native.js.map +1 -1
- package/dist/components/mobile-player/player.d.ts.map +1 -1
- package/dist/components/mobile-player/player.js +15 -0
- package/dist/components/mobile-player/player.js.map +1 -1
- package/dist/components/mobile-player/ui/audio-only-overlay.d.ts +2 -0
- package/dist/components/mobile-player/ui/audio-only-overlay.d.ts.map +1 -0
- package/dist/components/mobile-player/ui/audio-only-overlay.js +29 -0
- package/dist/components/mobile-player/ui/audio-only-overlay.js.map +1 -0
- package/dist/components/mobile-player/ui/index.d.ts +1 -0
- package/dist/components/mobile-player/ui/index.d.ts.map +1 -1
- package/dist/components/mobile-player/ui/index.js +1 -0
- package/dist/components/mobile-player/ui/index.js.map +1 -1
- package/dist/components/mobile-player/ui/input.d.ts +3 -2
- package/dist/components/mobile-player/ui/input.d.ts.map +1 -1
- package/dist/components/mobile-player/ui/input.js +18 -2
- package/dist/components/mobile-player/ui/input.js.map +1 -1
- package/dist/components/mobile-player/ui/metrics.d.ts.map +1 -1
- package/dist/components/mobile-player/ui/metrics.js +20 -2
- package/dist/components/mobile-player/ui/metrics.js.map +1 -1
- package/dist/components/mobile-player/ui/streamer-context-menu.d.ts +3 -1
- package/dist/components/mobile-player/ui/streamer-context-menu.d.ts.map +1 -1
- package/dist/components/mobile-player/ui/streamer-context-menu.js +64 -2
- package/dist/components/mobile-player/ui/streamer-context-menu.js.map +1 -1
- package/dist/components/mobile-player/ui/viewer-context-menu.d.ts.map +1 -1
- package/dist/components/mobile-player/ui/viewer-context-menu.js +29 -1
- package/dist/components/mobile-player/ui/viewer-context-menu.js.map +1 -1
- package/dist/components/mobile-player/use-webrtc.d.ts +4 -2
- package/dist/components/mobile-player/use-webrtc.d.ts.map +1 -1
- package/dist/components/mobile-player/use-webrtc.js +89 -15
- package/dist/components/mobile-player/use-webrtc.js.map +1 -1
- package/dist/components/mobile-player/video-async.native.d.ts.map +1 -1
- package/dist/components/mobile-player/video-async.native.js +15 -5
- package/dist/components/mobile-player/video-async.native.js.map +1 -1
- package/dist/components/mobile-player/video.d.ts.map +1 -1
- package/dist/components/mobile-player/video.js +10 -7
- package/dist/components/mobile-player/video.js.map +1 -1
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog.js +8 -0
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/textarea.d.ts.map +1 -1
- package/dist/components/ui/textarea.js +1 -1
- package/dist/components/ui/textarea.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useAQState.d.ts +2 -0
- package/dist/hooks/useAQState.d.ts.map +1 -0
- package/dist/hooks/useAQState.js +37 -0
- package/dist/hooks/useAQState.js.map +1 -0
- package/dist/hooks/useLivestreamInfo.d.ts +1 -2
- package/dist/hooks/useLivestreamInfo.d.ts.map +1 -1
- package/dist/hooks/useLivestreamInfo.js +18 -22
- package/dist/hooks/useLivestreamInfo.js.map +1 -1
- package/dist/hooks/useSegmentTiming.d.ts +1 -1
- package/dist/hooks/useSegmentTiming.d.ts.map +1 -1
- package/dist/hooks/useSegmentTiming.js +4 -0
- package/dist/hooks/useSegmentTiming.js.map +1 -1
- package/dist/i18n/i18n-loader.native.d.ts.map +1 -1
- package/dist/i18n/i18n-loader.native.js +13 -4
- package/dist/i18n/i18n-loader.native.js.map +1 -1
- package/dist/lib/slash-commands/teleport.d.ts +5 -1
- package/dist/lib/slash-commands/teleport.d.ts.map +1 -1
- package/dist/lib/slash-commands/teleport.js +57 -1
- package/dist/lib/slash-commands/teleport.js.map +1 -1
- package/dist/lib/theme/atoms.d.ts +125 -125
- package/dist/livestream-store/chat.d.ts +1 -0
- package/dist/livestream-store/chat.d.ts.map +1 -1
- package/dist/livestream-store/chat.js +10 -1
- package/dist/livestream-store/chat.js.map +1 -1
- package/dist/livestream-store/livestream-state.d.ts +2 -0
- package/dist/livestream-store/livestream-state.d.ts.map +1 -1
- package/dist/livestream-store/livestream-store.d.ts +1 -1
- package/dist/livestream-store/livestream-store.d.ts.map +1 -1
- package/dist/livestream-store/livestream-store.js +10 -1
- package/dist/livestream-store/livestream-store.js.map +1 -1
- package/dist/livestream-store/websocket-consumer.d.ts.map +1 -1
- package/dist/livestream-store/websocket-consumer.js +1 -0
- package/dist/livestream-store/websocket-consumer.js.map +1 -1
- package/dist/player-store/player-state.d.ts +3 -5
- package/dist/player-store/player-state.d.ts.map +1 -1
- package/dist/player-store/player-store.d.ts.map +1 -1
- package/dist/player-store/player-store.js +28 -5
- package/dist/player-store/player-store.js.map +1 -1
- package/dist/player-store/single-player-provider.d.ts +0 -2
- package/dist/player-store/single-player-provider.d.ts.map +1 -1
- package/dist/player-store/single-player-provider.js +0 -2
- package/dist/player-store/single-player-provider.js.map +1 -1
- package/dist/streamplace-store/branding.d.ts.map +1 -1
- package/dist/streamplace-store/branding.js +52 -1
- package/dist/streamplace-store/branding.js.map +1 -1
- package/dist/streamplace-store/stream.d.ts +4 -2
- package/dist/streamplace-store/stream.d.ts.map +1 -1
- package/dist/streamplace-store/stream.js +36 -74
- package/dist/streamplace-store/stream.js.map +1 -1
- package/locales/en-US/common.ftl +13 -1
- package/locales/manifest.json +21 -1
- package/locales/ro-RO/common.ftl +74 -0
- package/locales/ro-RO/settings.ftl +233 -0
- package/locales/zh-Hans/common.ftl +57 -0
- package/locales/zh-Hans/settings.ftl +222 -0
- package/node-compile-cache/v22.15.0-x64-efe9a9df-0/37be0eec +0 -0
- package/package.json +2 -2
- package/src/components/chat/badge.tsx +45 -0
- package/src/components/chat/chat-box.tsx +84 -54
- package/src/components/chat/chat-message.tsx +25 -21
- package/src/components/chat/chat.tsx +107 -90
- package/src/components/chat/emoji-suggestions.tsx +12 -21
- package/src/components/chat/system-message.tsx +12 -2
- package/src/components/chat/teleport-modal.tsx +310 -0
- package/src/components/chat/user-profile-card.tsx +275 -0
- package/src/components/dashboard/chat-panel.tsx +8 -0
- package/src/components/dashboard/header.tsx +8 -17
- package/src/components/dashboard/information-widget.tsx +17 -10
- package/src/components/mobile-player/fullscreen.native.tsx +3 -0
- package/src/components/mobile-player/fullscreen.tsx +2 -0
- package/src/components/mobile-player/player.tsx +22 -1
- package/src/components/mobile-player/ui/audio-only-overlay.tsx +48 -0
- package/src/components/mobile-player/ui/index.ts +1 -0
- package/src/components/mobile-player/ui/input.tsx +42 -12
- package/src/components/mobile-player/ui/metrics.tsx +17 -2
- package/src/components/mobile-player/ui/streamer-context-menu.tsx +138 -2
- package/src/components/mobile-player/ui/viewer-context-menu.tsx +40 -3
- package/src/components/mobile-player/use-webrtc.tsx +118 -17
- package/src/components/mobile-player/video-async.native.tsx +18 -5
- package/src/components/mobile-player/video.tsx +10 -7
- package/src/components/ui/dialog.tsx +8 -0
- package/src/components/ui/textarea.tsx +2 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useAQState.ts +37 -0
- package/src/hooks/useLivestreamInfo.ts +21 -22
- package/src/hooks/useSegmentTiming.tsx +7 -2
- package/src/i18n/i18n-loader.native.ts +9 -0
- package/src/lib/slash-commands/teleport.ts +68 -0
- package/src/livestream-store/chat.tsx +12 -0
- package/src/livestream-store/livestream-state.tsx +2 -0
- package/src/livestream-store/livestream-store.tsx +9 -1
- package/src/livestream-store/websocket-consumer.tsx +1 -0
- package/src/player-store/player-state.tsx +4 -7
- package/src/player-store/player-store.tsx +33 -7
- package/src/player-store/single-player-provider.tsx +0 -4
- package/src/streamplace-store/branding.tsx +60 -1
- package/src/streamplace-store/stream.tsx +42 -99
- package/node-compile-cache/v22.15.0-x64-92db9086-0/37be0eec +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useCreateStreamRecord = useCreateStreamRecord;
|
|
4
4
|
exports.useUpdateStreamRecord = useUpdateStreamRecord;
|
|
5
|
+
exports.useEndLivestream = useEndLivestream;
|
|
5
6
|
const tslib_1 = require("tslib");
|
|
6
7
|
const api_1 = require("@atproto/api");
|
|
7
8
|
const streamplace_store_1 = require("./streamplace-store");
|
|
@@ -97,73 +98,10 @@ function useCreateStreamRecord() {
|
|
|
97
98
|
let agent = (0, xrpc_1.usePDSAgent)();
|
|
98
99
|
let url = (0, streamplace_store_1.useUrl)();
|
|
99
100
|
const uploadThumbnail = useUploadThumbnail();
|
|
100
|
-
return async ({ title, customThumbnail, submitPost, canonicalUrl, notificationSettings, }) => {
|
|
101
|
-
if (typeof submitPost !== "boolean") {
|
|
102
|
-
submitPost = true;
|
|
103
|
-
}
|
|
101
|
+
return async ({ title, customThumbnail, submitPost, canonicalUrl, notificationSettings, idleTimeoutSeconds, }) => {
|
|
104
102
|
if (!agent) {
|
|
105
103
|
throw new Error("No PDS agent found");
|
|
106
104
|
}
|
|
107
|
-
if (!agent.did) {
|
|
108
|
-
throw new Error("No user DID found, assuming not logged in");
|
|
109
|
-
}
|
|
110
|
-
const u = new URL(url);
|
|
111
|
-
let thumbnail = undefined;
|
|
112
|
-
if (customThumbnail) {
|
|
113
|
-
try {
|
|
114
|
-
thumbnail = await uploadThumbnail(agent, customThumbnail);
|
|
115
|
-
}
|
|
116
|
-
catch (e) {
|
|
117
|
-
throw new Error(`Custom thumbnail upload failed ${e}`);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
// No custom thumbnail: fetch the server-side image and upload it
|
|
122
|
-
// try thrice lel
|
|
123
|
-
let tries = 0;
|
|
124
|
-
try {
|
|
125
|
-
for (; tries < 3; tries++) {
|
|
126
|
-
try {
|
|
127
|
-
console.log(`Fetching thumbnail from ${u.protocol}//${u.host}/api/playback/${agent.did}/stream.png`);
|
|
128
|
-
const thumbnailRes = await fetch(`${u.protocol}//${u.host}/api/playback/${agent.did}/stream.png`);
|
|
129
|
-
if (!thumbnailRes.ok) {
|
|
130
|
-
throw new Error(`Failed to fetch thumbnail: ${thumbnailRes.status})`);
|
|
131
|
-
}
|
|
132
|
-
const thumbnailBlob = await thumbnailRes.blob();
|
|
133
|
-
console.log(thumbnailBlob);
|
|
134
|
-
thumbnail = await uploadThumbnail(agent, thumbnailBlob);
|
|
135
|
-
}
|
|
136
|
-
catch (e) {
|
|
137
|
-
console.warn(`Failed to fetch thumbnail, retrying (${tries + 1}/3): ${e}`);
|
|
138
|
-
// Wait 1 second before retrying
|
|
139
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
140
|
-
if (tries === 2) {
|
|
141
|
-
throw new Error(`Failed to fetch thumbnail after 3 tries: ${e}`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch (e) {
|
|
147
|
-
throw new Error(`Thumbnail upload failed ${e}`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
let newPost = undefined;
|
|
151
|
-
const did = agent.did;
|
|
152
|
-
const profile = await agent.getProfile({ actor: did });
|
|
153
|
-
if (submitPost) {
|
|
154
|
-
if (!profile) {
|
|
155
|
-
throw new Error("No profile found for the user DID");
|
|
156
|
-
}
|
|
157
|
-
const params = new URLSearchParams({
|
|
158
|
-
did: did,
|
|
159
|
-
time: new Date().toISOString(),
|
|
160
|
-
});
|
|
161
|
-
let post = await buildGoLivePost(title, u, profile.data, params, thumbnail, agent);
|
|
162
|
-
newPost = await createNewPost(agent, post);
|
|
163
|
-
if (!newPost.uri || !newPost.cid) {
|
|
164
|
-
throw new Error("Cannot read properties of undefined (reading 'uri' or 'cid')");
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
105
|
let platform = react_native_1.Platform.OS;
|
|
168
106
|
let platVersion = react_native_1.Platform.Version
|
|
169
107
|
? react_native_1.Platform.Version.toString()
|
|
@@ -174,32 +112,44 @@ function useCreateStreamRecord() {
|
|
|
174
112
|
window.navigator) {
|
|
175
113
|
platVersion = (0, browser_1.getBrowserName)(window.navigator.userAgent);
|
|
176
114
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
canonicalUrl = thisUrl;
|
|
115
|
+
if (!agent.did) {
|
|
116
|
+
throw new Error("No user DID found, assuming not logged in");
|
|
180
117
|
}
|
|
118
|
+
const thisUrl = `${url}/${agent.did}`;
|
|
181
119
|
const record = {
|
|
182
120
|
$type: "place.stream.livestream",
|
|
183
121
|
title: title,
|
|
184
122
|
url: thisUrl,
|
|
185
123
|
createdAt: new Date().toISOString(),
|
|
124
|
+
lastSeenAt: new Date().toISOString(),
|
|
186
125
|
// would match up with e.g. https://stream.place/iame.li
|
|
187
126
|
canonicalUrl: canonicalUrl,
|
|
188
127
|
// user agent style string
|
|
189
128
|
// e.g. `@streamplace/components/0.1.0 (ios, 32.0)`
|
|
190
129
|
agent: `@streamplace/components/${package_json_1.default.version} (${platform}, ${platVersion})`,
|
|
191
|
-
|
|
192
|
-
thumb: thumbnail,
|
|
130
|
+
idleTimeoutSeconds: idleTimeoutSeconds,
|
|
193
131
|
};
|
|
194
132
|
if (notificationSettings) {
|
|
195
133
|
record.notificationSettings = notificationSettings;
|
|
196
134
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
135
|
+
if (customThumbnail) {
|
|
136
|
+
try {
|
|
137
|
+
const thumbnail = await uploadThumbnail(agent, customThumbnail);
|
|
138
|
+
record.thumb = thumbnail;
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
throw new Error(`Custom thumbnail upload failed ${e}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const output = await agent.place.stream.live.startLivestream({
|
|
145
|
+
livestream: record,
|
|
146
|
+
streamer: agent.did,
|
|
147
|
+
createBlueskyPost: submitPost,
|
|
201
148
|
});
|
|
202
|
-
|
|
149
|
+
if (!output.success) {
|
|
150
|
+
throw new Error("Failed to start livestream");
|
|
151
|
+
}
|
|
152
|
+
return output.data;
|
|
203
153
|
};
|
|
204
154
|
}
|
|
205
155
|
function useUpdateStreamRecord(customUrl = null) {
|
|
@@ -250,4 +200,16 @@ function useUpdateStreamRecord(customUrl = null) {
|
|
|
250
200
|
return record;
|
|
251
201
|
};
|
|
252
202
|
}
|
|
203
|
+
function useEndLivestream() {
|
|
204
|
+
let agent = (0, xrpc_1.usePDSAgent)();
|
|
205
|
+
return async () => {
|
|
206
|
+
if (!agent) {
|
|
207
|
+
throw new Error("No PDS agent found");
|
|
208
|
+
}
|
|
209
|
+
if (!agent.did) {
|
|
210
|
+
throw new Error("No user DID found, assuming not logged in");
|
|
211
|
+
}
|
|
212
|
+
return await agent.place.stream.live.stopLivestream({});
|
|
213
|
+
};
|
|
214
|
+
}
|
|
253
215
|
//# sourceMappingURL=stream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/streamplace-store/stream.tsx"],"names":[],"mappings":";;AA6HA,
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/streamplace-store/stream.tsx"],"names":[],"mappings":"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"}
|
package/locales/en-US/common.ftl
CHANGED
|
@@ -51,7 +51,7 @@ user-offline-message = { $source ->
|
|
|
51
51
|
[streamer] Looks like <1>@{ $handle } is offline</1>, but they recommend checking out:
|
|
52
52
|
*[default] Looks like <1>@{ $handle } is offline</1>, but we recommend checking out:
|
|
53
53
|
}
|
|
54
|
-
user-offline-no-recommendations =
|
|
54
|
+
user-offline-no-recommendations =
|
|
55
55
|
Looks like <1>@{ $handle } is offline</1> right now.
|
|
56
56
|
Check back later.
|
|
57
57
|
streaming-title = streaming { $title }
|
|
@@ -60,3 +60,15 @@ viewer-count = { $count ->
|
|
|
60
60
|
[1] 1 viewer
|
|
61
61
|
*[other] { $count } viewers
|
|
62
62
|
}
|
|
63
|
+
|
|
64
|
+
## PDS Host Selector
|
|
65
|
+
pds-selector-title = New to the Atmosphere?
|
|
66
|
+
pds-selector-description = You'll need to select a PDS (Personal Data Server) to access apps on the Atmosphere, such as Bluesky, Tangled, and Spark.
|
|
67
|
+
pds-selector-custom-label = Another PDS
|
|
68
|
+
pds-selector-custom-description = Enter your own PDS host URL
|
|
69
|
+
pds-selector-custom-url-label = Custom PDS URL
|
|
70
|
+
pds-selector-custom-url-placeholder = https://pds.example.com
|
|
71
|
+
pds-selector-learn-more = Learn more about self-hosting
|
|
72
|
+
pds-selector-info = Each host has their own policies and reliability standards. Your ATProto data lives on the host you choose and you can migrate later. Note: Streamplace has its own moderation rules - you can be banned from Streamplace regardless of which host you choose.
|
|
73
|
+
pds-selector-read-policies = Read { $label }'s <tosLink>Terms of Service</tosLink> and <privacyLink>Privacy Policy</privacyLink> before continuing.
|
|
74
|
+
pds-selector-handle-policy-checkbox = I have read and agree to the <policyLink>handle policy</policyLink>
|
package/locales/manifest.json
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"supportedLocales": [
|
|
2
|
+
"supportedLocales": [
|
|
3
|
+
"en-US",
|
|
4
|
+
"pt-BR",
|
|
5
|
+
"es-ES",
|
|
6
|
+
"zh-Hant",
|
|
7
|
+
"fr-FR",
|
|
8
|
+
"zh-Hans",
|
|
9
|
+
"ro-RO"
|
|
10
|
+
],
|
|
3
11
|
"fallbackChain": ["en-US"],
|
|
4
12
|
"languages": {
|
|
5
13
|
"en-US": {
|
|
@@ -31,6 +39,18 @@
|
|
|
31
39
|
"name": "French",
|
|
32
40
|
"nativeName": "Français",
|
|
33
41
|
"flag": "🇫🇷"
|
|
42
|
+
},
|
|
43
|
+
"zh-Hans": {
|
|
44
|
+
"code": "zh-Hans",
|
|
45
|
+
"name": "Chinese (Simplified)",
|
|
46
|
+
"nativeName": "简体中文",
|
|
47
|
+
"flag": "汉"
|
|
48
|
+
},
|
|
49
|
+
"ro-RO": {
|
|
50
|
+
"code": "ro-RO",
|
|
51
|
+
"name": "Romanian",
|
|
52
|
+
"nativeName": "Română",
|
|
53
|
+
"flag": "🇷🇴"
|
|
34
54
|
}
|
|
35
55
|
}
|
|
36
56
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Common UI Translations - English (US)
|
|
2
|
+
|
|
3
|
+
## General UI
|
|
4
|
+
loading = Se încarcă...
|
|
5
|
+
error = Eroare
|
|
6
|
+
cancel = Anulare
|
|
7
|
+
confirm = Confirmare
|
|
8
|
+
close = Închidere
|
|
9
|
+
open = Deschidere
|
|
10
|
+
ok = OK
|
|
11
|
+
yes = Da
|
|
12
|
+
no = Nu
|
|
13
|
+
continue = Continuare
|
|
14
|
+
back = Înapoi
|
|
15
|
+
next = Următorul
|
|
16
|
+
finish = Finalizare
|
|
17
|
+
|
|
18
|
+
## Actions
|
|
19
|
+
save = Salvare
|
|
20
|
+
delete = Ștergere
|
|
21
|
+
edit = Editare
|
|
22
|
+
create = Creare
|
|
23
|
+
update = Actualizare
|
|
24
|
+
refresh = Reîmprospătare
|
|
25
|
+
|
|
26
|
+
## Status Messages
|
|
27
|
+
success = Succes
|
|
28
|
+
warning = Avertisment
|
|
29
|
+
info = Informație
|
|
30
|
+
|
|
31
|
+
## Input Placeholders
|
|
32
|
+
search-placeholder = Căutare...
|
|
33
|
+
message-input = Introduceți-vă mesajul...
|
|
34
|
+
|
|
35
|
+
## Authentication & Access
|
|
36
|
+
please-log-in-to-access-this-page = Vă rugăm să vă conectați pentru a accesa această pagină
|
|
37
|
+
go-to-settings = Mergeți la Setări
|
|
38
|
+
go-back = Mergeți înapoi
|
|
39
|
+
|
|
40
|
+
## Demo and Testing
|
|
41
|
+
welcome-user = Bun venit, { $username }!
|
|
42
|
+
notification-count = { $count ->
|
|
43
|
+
[0] Nici o notificare
|
|
44
|
+
[1] O notificare
|
|
45
|
+
*[other] { $count } (de) notificări
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
## Offline User
|
|
49
|
+
user-offline = utilizatorul este offline
|
|
50
|
+
user-offline-message = { $source ->
|
|
51
|
+
[streamer] Se pare că <1>@{ $handle } este offline</1>, dar recomandă să vizionați:
|
|
52
|
+
*[default] Se pare că <1>@{ $handle } este offline</1>, dar vă recomandăm să vizionați:
|
|
53
|
+
}
|
|
54
|
+
user-offline-no-recommendations =
|
|
55
|
+
Se pare că <1>@{ $handle } este offline</1> acum.
|
|
56
|
+
Reveniți mai târziu.
|
|
57
|
+
streaming-title = transmisie în direct { $title }
|
|
58
|
+
viewer-count = { $count ->
|
|
59
|
+
[0] 0 vizionări
|
|
60
|
+
[1] 1 vizionare
|
|
61
|
+
*[other] { $count } (de) vizionări
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
## PDS Host Selector
|
|
65
|
+
pds-selector-title = Nou pe Atmosphere?
|
|
66
|
+
pds-selector-description = Va trebui să selectați un PDS (Personal Data Server) pentru a accesa aplicațiile de pe Atmosphere, cum ar fi Bluesky, Tangled și Spark.
|
|
67
|
+
pds-selector-custom-label = Alt PDS
|
|
68
|
+
pds-selector-custom-description = Introduceți adresa URL a propriei gazde PDS
|
|
69
|
+
pds-selector-custom-url-label = URL PDS personalizat
|
|
70
|
+
pds-selector-custom-url-placeholder = https://pds.exemplu.ro
|
|
71
|
+
pds-selector-learn-more = Aflați mai multe despre găzduirea proprie
|
|
72
|
+
pds-selector-info = Fiecare gazdă are propriile politici și standarde de fiabilitate. Datele dvs. ATProto se află pe gazda pe care o alegeți și le puteți migra ulterior. Notă: Streamplace are propriile reguli de moderare - accesul dvs. poate fi interzis pe Streamplace indiferent de gazda pe care o alegeți.
|
|
73
|
+
pds-selector-read-policies = Citiți <tosLink>Termenii și condițiile</tosLink> și <privacyLink>Politica de confidențialitate</privacyLink> ale { $label } înainte de a continua.
|
|
74
|
+
pds-selector-handle-policy-checkbox = Am citit și sunt de acord cu <policyLink>politica de gestionare</policyLink>
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# Settings Page Translations - Romanian (Romania)
|
|
2
|
+
|
|
3
|
+
## App Version
|
|
4
|
+
app-version = Streamplace v{ $version }
|
|
5
|
+
download-new-update = Descărcați noua actualizare
|
|
6
|
+
check-for-updates = Căutați actualizări
|
|
7
|
+
bundled-runtype = Bundled
|
|
8
|
+
ota-runtype = Over-the-Air (OTA)
|
|
9
|
+
recovery-runtype = Mod de recuperare
|
|
10
|
+
|
|
11
|
+
modal-latest-version = Aveți cea mai recentă versiune.
|
|
12
|
+
modal-no-update-available = Aveți cea mai recentă versiune de Streamplace, ura!
|
|
13
|
+
modal-update-available-title = Actualizare disponibilă
|
|
14
|
+
modal-update-available-description = O nouă versiune de Streamplace este gata de descărcare
|
|
15
|
+
modal-update-failed = Căutarea actualizării a eșuat. Este posibil să fie nevoie să actualizați aplicația prin { $store }.
|
|
16
|
+
modal-update-failed-title = Actualizare eșuată
|
|
17
|
+
modal-update-failed-description = Căutarea actualizării a eșuat. Este posibil să fie nevoie să actualizați aplicația prin { $store }.
|
|
18
|
+
button-reload-app-on-update = Aplicați actualizarea (va reîncărca aplicația)
|
|
19
|
+
|
|
20
|
+
## Custom Node Settings
|
|
21
|
+
use-custom-node = Utilizați nodul personalizat
|
|
22
|
+
default-url = Default: { $url }
|
|
23
|
+
enter-custom-node-url = Introduceți adresa URL a nodului personalizat
|
|
24
|
+
save-button = SALVARE
|
|
25
|
+
|
|
26
|
+
## Language Settings
|
|
27
|
+
language-selection = Limbă
|
|
28
|
+
language-selection-description = Alegeți-vă limba preferată
|
|
29
|
+
input-search-languages = Căutați limbi...
|
|
30
|
+
help-translate = Ajutați-ne să traducem Streamplace
|
|
31
|
+
help-translate-description = Căutăm voluntari care să ne ajute la traducerea Streamplace în mai multe limbi. Dacă sunteți interesați, vă rugăm să ne contactați pe Discord sau GitHub!
|
|
32
|
+
currently-translating = Traducerile sunt pe drum
|
|
33
|
+
currently-translating-description = Este posibil ca unele părți ale aplicației să pară incomplete. Vă mulțumim pentru răbdare!
|
|
34
|
+
|
|
35
|
+
## Debug Recording
|
|
36
|
+
debug-recording-title = Permiteți-i lui { $host } să înregistreze transmisiunea live pentru depanare și îmbunătățirea serviciului
|
|
37
|
+
debug-recording-description = Opțional
|
|
38
|
+
|
|
39
|
+
## Key Management
|
|
40
|
+
manage-keys = Gestionare Chei
|
|
41
|
+
|
|
42
|
+
## Settings Page Specific
|
|
43
|
+
settings-title = Setări
|
|
44
|
+
|
|
45
|
+
## Navigation Categories
|
|
46
|
+
about = Despre
|
|
47
|
+
account = Cont
|
|
48
|
+
advanced = Complex
|
|
49
|
+
danmu = Danmu
|
|
50
|
+
developer = Dezvoltator
|
|
51
|
+
languages = Limbi
|
|
52
|
+
privacy-security = Confidențialitate și securitate
|
|
53
|
+
streaming = Streaming
|
|
54
|
+
|
|
55
|
+
## Common Actions
|
|
56
|
+
cancel = Anulare
|
|
57
|
+
create = Creare
|
|
58
|
+
delete = Ștergere
|
|
59
|
+
refresh = Reîmprospătare
|
|
60
|
+
save-button = Salvare
|
|
61
|
+
sign-in = Conectare
|
|
62
|
+
update = Actualizare
|
|
63
|
+
log-out = Deconectare
|
|
64
|
+
optional = opțional
|
|
65
|
+
|
|
66
|
+
## Account Settings
|
|
67
|
+
account-greeting = Hei, @{ $handle }.
|
|
68
|
+
edit-profile-bluesky = Editare profil (pe Bluesky)
|
|
69
|
+
change-name-color = Schimbați culoarea numelui
|
|
70
|
+
|
|
71
|
+
## Key Management
|
|
72
|
+
key-management = Gestionare chei
|
|
73
|
+
key-manager = Manager cheie
|
|
74
|
+
manage-keys = Gestionare chei
|
|
75
|
+
your-stream-pubkeys = Cheile publice ale transmisiunii dvs.
|
|
76
|
+
no-keys = Nicio cheie configurată
|
|
77
|
+
pubkey-description = Cheile publice sunt asociate cu cheile de transmisiune (utilizate în software-ul de streaming) pentru a semna și verifica transmisiunea.
|
|
78
|
+
keys-count = { $count ->
|
|
79
|
+
[one] { $count } cheie
|
|
80
|
+
*[other] { $count } chei
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
## Recommendations
|
|
84
|
+
recommendations = Recomandări
|
|
85
|
+
manage-recommendations = Gestionați recomandările
|
|
86
|
+
recommendations-to-others = Recomandări pentru Alții
|
|
87
|
+
recommendations-description = Distribuie până la 8 streameri pe care îi recomandați spectatorilor dvs.
|
|
88
|
+
no-recommendations-yet = Nu au fost configurate recomandări încă
|
|
89
|
+
add-recommendation = Adăugare recomandare
|
|
90
|
+
streamer-did = DID Streamer
|
|
91
|
+
recommendations-count = { $count ->
|
|
92
|
+
[one] { $count } recomandare
|
|
93
|
+
*[other] { $count } (de) recomandări
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
## Webhook Management
|
|
97
|
+
webhooks = Webhook-uri
|
|
98
|
+
webhook-integrations = Integrari Webhook
|
|
99
|
+
webhook-integrations-description = Conectați servicii externe pentru a primi actualizări în timp real despre transmisiunile dvs.
|
|
100
|
+
create-webhook = Creare Webhook
|
|
101
|
+
edit-webhook = Editare Webhook
|
|
102
|
+
delete-webhook = Ștergere Webhook
|
|
103
|
+
no-webhooks-yet = Nu sunt încă configurate webhook-uri
|
|
104
|
+
failed-load-webhooks = Nu s-au putut încărca webhook-urile
|
|
105
|
+
webhook-will-no-longer-receive-events = Acest webhook nu va mai primi evenimente
|
|
106
|
+
create-first-webhook-description = Creați-vă primul webhook pentru a începe să primiți evenimente de transmisiune
|
|
107
|
+
example-captain-hook = Captain Hook
|
|
108
|
+
webhooks-count = { $count ->
|
|
109
|
+
[one] { $count } webhook
|
|
110
|
+
*[other] { $count } (de) webhook-uri
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
## Webhook Events
|
|
114
|
+
activates-on = Se activează la:
|
|
115
|
+
events = Evenimente
|
|
116
|
+
events-livestream = Evenimente în transmisiuni
|
|
117
|
+
events-chat = Evenimente de conversașie
|
|
118
|
+
untitled-webhook = Webhook fără titlu
|
|
119
|
+
inactive = Inactiv
|
|
120
|
+
active = Activ
|
|
121
|
+
|
|
122
|
+
## Multistreaming
|
|
123
|
+
multistream = Multi-transmisiune
|
|
124
|
+
multistream-targets = Ținte multi-transmisiune
|
|
125
|
+
multistream-description = Distribuie automat transmisiunile tale live Streamplace către alte servicii de streaming precum Twitch sau YouTube.
|
|
126
|
+
create-multistream-target = Creare țintă multi-transmisiune
|
|
127
|
+
untitled-multistream-target = Țintă fără titlu
|
|
128
|
+
failed-load-multistream-targets = Nu s-au putut încărca țintele multi-transmisiune. Vă rugăm să încercați din nou.
|
|
129
|
+
failed-toggle-multistream-target = Nu s-a putut comuta ținta multi-transmisiune. Vă rugăm să încercați din nou.
|
|
130
|
+
failed-delete-multistream-target = Ștergerea țintei multi-transmisiune nu a reușit. Încercați din nou.
|
|
131
|
+
no-multistream-targets-yet = Nu există încă ținte!
|
|
132
|
+
multistream-targets-count = { $count ->
|
|
133
|
+
[one] { $count } țintă
|
|
134
|
+
*[other] { $count } (de) ținte
|
|
135
|
+
}
|
|
136
|
+
multistream-delete-target-confirmation = Sunteți sigur că vreți să ștergeți „{ $target }”?
|
|
137
|
+
this-action-cannot-be-undone = Această acțiune nu poate fi anulată.
|
|
138
|
+
rtmp-target-name = Țintă RTMP
|
|
139
|
+
rtmp-target-url = URL RTMP
|
|
140
|
+
rtmp-target-name-placeholder = Ținta mea transmisiune
|
|
141
|
+
multistream-create-target = Creare țintă
|
|
142
|
+
multistream-edit-target = Editare țintă
|
|
143
|
+
created = creată
|
|
144
|
+
status = stare
|
|
145
|
+
|
|
146
|
+
## Debug Recording
|
|
147
|
+
debug-recording = Depanare înregistrare
|
|
148
|
+
|
|
149
|
+
## Danmu Settings
|
|
150
|
+
danmu = Danmu
|
|
151
|
+
danmu-enabled = Activare Danmu
|
|
152
|
+
danmu-enabled-description = Afișați mesajele din chatul live ca comentarii plutitoare pe ecran
|
|
153
|
+
danmu-opacity = Opacitate
|
|
154
|
+
danmu-speed = Viteză
|
|
155
|
+
danmu-lane-count = Număr de benzi
|
|
156
|
+
danmu-max-messages = Mesaje maxime
|
|
157
|
+
|
|
158
|
+
## General
|
|
159
|
+
app-version-description = Nu sunt disponibile actualizări în acest moment
|
|
160
|
+
confirm-delete = Sigur vreți să ștergeți asta?
|
|
161
|
+
action-cannot-be-undone = Această acțiune nu poate fi anulată
|
|
162
|
+
name-optional = Nume (opțional)
|
|
163
|
+
deleting = Se șterge...
|
|
164
|
+
saving = Se salvează...
|
|
165
|
+
go-to-dashboard = Mergeți la tabloul de bord
|
|
166
|
+
need-setup-live-dashboard = Trebuie să configurați mai întâi transmisiunile? Vizitați tabloul de bord al transmisiunilor
|
|
167
|
+
no-languages-found = Nu s-au găsit limbi
|
|
168
|
+
|
|
169
|
+
## Branding Administration
|
|
170
|
+
branding = Branding
|
|
171
|
+
branding-admin = Administrarea brandingului
|
|
172
|
+
branding-admin-description = Personalizați-vă instanța Streamplace. Rețineți că propagarea setărilor poate dura câteva ore.
|
|
173
|
+
branding-login-required = Vă rugăm să vă conectați pentru a gestiona brandingul
|
|
174
|
+
branding-configuration = Configurare
|
|
175
|
+
branding-text-settings = Setări text
|
|
176
|
+
branding-colors = Culori
|
|
177
|
+
branding-legal-links = Link-uri legale
|
|
178
|
+
branding-images = Imagini
|
|
179
|
+
|
|
180
|
+
## Branding Fields
|
|
181
|
+
branding-broadcaster-did = DID radiodifuzor
|
|
182
|
+
branding-broadcaster-did-description = Lăsați gol pentru a utiliza valorile implicite ale serverului
|
|
183
|
+
branding-site-title = Titlul site-ului
|
|
184
|
+
branding-site-title-placeholder = Introduceți un nou titlu de site
|
|
185
|
+
branding-site-description = Descrierea site-ului
|
|
186
|
+
branding-site-description-placeholder = Introduceți descrierea site-ului
|
|
187
|
+
branding-default-streamer = Streamer implicit
|
|
188
|
+
branding-default-streamer-none = Nimic
|
|
189
|
+
branding-default-streamer-placeholder = did:plc:...
|
|
190
|
+
branding-clear-default-streamer = Ștergeți Streamerul implicit
|
|
191
|
+
branding-primary-color = Culoare primară
|
|
192
|
+
branding-primary-color-placeholder = #6366f1
|
|
193
|
+
branding-accent-color = Culoare de accent
|
|
194
|
+
branding-accent-color-placeholder = #8b5cf6
|
|
195
|
+
branding-main-logo = Logo principal
|
|
196
|
+
branding-main-logo-description = SVG, PNG, or JPEG (max 500KB)
|
|
197
|
+
branding-favicon = Favicon
|
|
198
|
+
branding-favicon-description = SVG, PNG, sau ICO (maxim 100KB)
|
|
199
|
+
branding-sidebar-bg = Imagine de fundal din bara laterală
|
|
200
|
+
branding-sidebar-bg-description = SVG, PNG sau JPEG (maxim 500kb) - apare aliniat la partea de jos a barei laterale, pe lățime completă. Încărcați o imagine cu opacitate pentru cele mai bune rezultate, deoarece în prezent nu există o opțiune separată de opacitate.
|
|
201
|
+
branding-current = Current: { $value }
|
|
202
|
+
branding-dimensions = { $height } x { $width }
|
|
203
|
+
|
|
204
|
+
## Branding Actions
|
|
205
|
+
branding-upload-logo = Încărcare logo
|
|
206
|
+
branding-delete-logo = Ștergere logo
|
|
207
|
+
branding-upload-favicon = Încărcare Favicon
|
|
208
|
+
branding-delete-favicon = Ștergere Favicon
|
|
209
|
+
branding-upload-background = Încărcare imagine de fundal
|
|
210
|
+
branding-delete-background = Ștergere imagine de fundal
|
|
211
|
+
branding-web-only = Încărcarea imaginilor este disponibilă doar pe web.
|
|
212
|
+
|
|
213
|
+
## Branding Legal Links
|
|
214
|
+
refresh-branding = Actualizați elementele de branding
|
|
215
|
+
branding-add-legal-link = Adăugați link legal
|
|
216
|
+
branding-edit-legal-link = Editați linkul legal
|
|
217
|
+
branding-legal-link-text-placeholder = Textul linkului (de exemplu, Politica de confidențialitate)
|
|
218
|
+
branding-legal-link-url-placeholder = Adresa URL (de ex., https://example.com/privacy)
|
|
219
|
+
add = Adăugare
|
|
220
|
+
edit = Editare
|
|
221
|
+
|
|
222
|
+
## Branding Toast Messages
|
|
223
|
+
branding-not-authenticated = Vă rugăm să vă conectați mai întâi
|
|
224
|
+
branding-empty-value = Vă rugăm să introduceți o valoare
|
|
225
|
+
branding-update-success = { $key } a fost actualizat cu succes
|
|
226
|
+
branding-upload-success = { $key } a fost încărcat cu succes
|
|
227
|
+
branding-delete-success = { $key } a fost șters cu succes
|
|
228
|
+
branding-upload-failed = Încărcare eșuată
|
|
229
|
+
branding-delete-failed = Ștergere eșuată
|
|
230
|
+
branding-not-available = Încărcarea de fișiere este disponibilă doar pe web.
|
|
231
|
+
|
|
232
|
+
## Navigation Categories (About Page)
|
|
233
|
+
node-legal-documents = Documente specifice radiodifuzorului
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Common UI Translations - Chinese (Simplified)
|
|
2
|
+
|
|
3
|
+
## General UI
|
|
4
|
+
loading = 正在加载...
|
|
5
|
+
error = 错误
|
|
6
|
+
cancel = 取消
|
|
7
|
+
confirm = 确认
|
|
8
|
+
close = 关闭
|
|
9
|
+
open = 开启
|
|
10
|
+
ok = 确定
|
|
11
|
+
yes = 是
|
|
12
|
+
no = 否
|
|
13
|
+
continue = 继续
|
|
14
|
+
back = 返回
|
|
15
|
+
next = 下一步
|
|
16
|
+
finish = 完成
|
|
17
|
+
|
|
18
|
+
## Actions
|
|
19
|
+
save = 保存
|
|
20
|
+
delete = 删除
|
|
21
|
+
edit = 编辑
|
|
22
|
+
create = 创建
|
|
23
|
+
update = 更新
|
|
24
|
+
refresh = 刷新
|
|
25
|
+
|
|
26
|
+
## Status Messages
|
|
27
|
+
success = 成功
|
|
28
|
+
warning = 警告
|
|
29
|
+
info = 信息
|
|
30
|
+
|
|
31
|
+
## Input Placeholders
|
|
32
|
+
search-placeholder = 搜索...
|
|
33
|
+
message-input = 输入您的消息...
|
|
34
|
+
|
|
35
|
+
## Authentication & Access
|
|
36
|
+
please-log-in-to-access-this-page = 请登录以访问此页面
|
|
37
|
+
go-to-settings = 前往设置
|
|
38
|
+
go-back = 返回
|
|
39
|
+
|
|
40
|
+
## Demo and Testing
|
|
41
|
+
welcome-user = 欢迎,{ $username }!
|
|
42
|
+
notification-count = { $count ->
|
|
43
|
+
[0] 无通知
|
|
44
|
+
*[other] { $count } 则通知
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
## Offline User
|
|
48
|
+
user-offline = 用户离线
|
|
49
|
+
user-offline-message = { $source ->
|
|
50
|
+
[streamer] 看起来 <1>@{ $handle } 离线</1>了,但他们推荐观看:
|
|
51
|
+
*[default] 看起来 <1>@{ $handle } 离线</1>了,但我们推荐观看:
|
|
52
|
+
}
|
|
53
|
+
user-offline-no-recommendations =
|
|
54
|
+
看起来 <1>@{ $handle } 离线</1>了。
|
|
55
|
+
请稍后再来看看。
|
|
56
|
+
streaming-title = 正在直播 { $title }
|
|
57
|
+
viewer-count = { $count } 位观众
|