1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179 | ;; ported-from: src/i18n/en.ts
;;
;; The EN catalog is the source of truth: the other catalogs are tested against
;; its key set (test/i18n.test.mjs replaces the TS-era MsgKey type check — a
;; missing translation fails the suite) and every value is byte-snapshotted
;; against the TypeScript catalogs it was transliterated from.
(ns sueta.i18n.en)
(def catalog
{;; header / chrome (ui.ts)
"top.rooms.title" "your rooms"
"top.call.title" "start a call"
"top.bell.title" "notifications"
"top.invite.title" "copy invite link"
"peers.just-you" "just you"
"peers.here" "{n} here"
;; join overlay
"join.sub" "p2p · end-to-end encrypted · no servers hold your words"
"join.name.ph" "your name"
"join.btn" "join"
;; composer / thread
"composer.photo.title" "send a photo"
"composer.send.title" "send"
"composer.ph" "message…"
"thread.title" "thread"
"thread.ph" "reply…"
;; roster / peer states
"roster.you" "(you)"
"roster.online" "online"
"roster.reconnecting" "reconnecting…"
"peer.state.direct" "direct"
"peer.state.relay" "via relay"
"peer.state.connecting" "connecting"
"peer.state.disconnected" "disconnected"
;; peer sheet
"peer.unknown" "unknown"
"peer.key-changed" "⚠️ this name previously used a DIFFERENT key"
"peer.verify-hint" "ask them to open their identity card and read their emoji aloud — if all four match, mark them verified"
"peer.verified-btn" "✓ verified — tap to unverify"
"peer.verify-btn" "mark as verified"
"peer.no-identity" "no identity announced — their browser may not support it, or they run an old version"
"sheet.close" "close"
"toast.verified" "✓ {name} verified on this device"
"toast.unverified" "{name} unverified"
"toast.key-changed" "⚠️ \"{name}\" has a DIFFERENT identity key than before — verify before trusting"
;; identity sheet
"id.title" "your identity"
"id.conflict.warn" "⚠ your suite identity on ardegazu.ro is a different key"
"id.conflict.hint" "use it here to be the same person in every app — or keep this one for chat only."
"id.adopt" "use suite identity"
"id.adopt.arm" "switch? this room identity is abandoned unless its key is saved"
"id.keep" "keep this one"
"id.rename.ph" "display name"
"id.rename" "rename"
"id.hint" "others verify you by these four emoji. your identity is one secret key — save it in your password app to keep the same identity on any device (devices with the same identity also sync your room list). anyone holding the key gets both."
"id.save" "💾 save in password app"
"id.copy" "copy key"
"id.reveal" "reveal"
"id.import.ph" "paste identity key to switch…"
"id.import" "use this identity"
"id.import.arm" "switch identity? tap again"
"id.no-ed25519" "this browser cannot create an identity (no Ed25519 support)"
"toast.kept-local" "keeping this identity for chat — the hub won't ask again"
"toast.renamed" "you're now “{name}”"
"toast.saved-pw" "🗝️ saved — check your password manager"
"toast.save-manual" "🗝️ if your password app offers to save, accept — otherwise use “copy key”"
"toast.key-copied" "identity key copied — store it somewhere safe"
"toast.already-you" "that's already your identity"
"toast.bad-key" "that doesn't look like an identity key"
"toast.import-failed" "could not save the identity on this device"
;; empty room
"empty.title" "This is your room — nobody else is here yet."
"empty.body" "Rooms live in the link itself (the part after #). Send someone this room's invite link and they'll land right here. Opening {host} without a link starts a new, separate room."
"empty.invite" "🔗 copy invite link"
"toast.invite-copied" "invite link copied — anyone with it can join & read"
;; messages
"msg.image.alt" "shared image"
"msg.image.expired" "🌫 image expired"
"msg.id.title" "identity fingerprint"
"msg.replies" {"one" "💬 {n} reply" "other" "💬 {n} replies"}
"msg.reply.title" "reply in thread"
"act.reply" "💬 reply"
"msg.call-started" "📞 started a call"
"toast.image-failed" "image failed"
"err.one-image" "one image at a time"
"err.image-too-large" "image too large after compression"
"err.image-compress" "could not compress image under 2 MiB"
;; calls
"call.join" "join"
"call.join-video" "join 📹"
"call.leave" "leave"
"call.in-call" "📞 {n} in call"
"call.audio-unlock" "🔊 tap for call audio"
"call.mesh-warn" "mesh calls degrade past {n} people"
"call.video-cap-joined" "camera is limited to {n} in a room call — joined with mic only"
"call.video-cap" "camera is limited to {n} in a room call"
"call.err.no-device" "no microphone/camera found"
"call.err.busy" "microphone/camera is in use by another app"
"call.err.denied" "microphone/camera permission denied"
;; notifications
"notif.unsupported" "this browser has no notifications — on iPhone, install the app to your home screen first"
"notif.off" "notifications off"
"notif.blocked" "notifications are blocked for this site in browser settings"
"notif.on" "🔔 you'll be notified while the app is open anywhere — nothing runs on any server"
"notif.photo" "📷 photo"
;; copy fallback
"copy.manual" "copy it manually:"
;; lobby (rooms.ts)
"lobby.sub1" "p2p · end-to-end encrypted · rooms are private links,"
"lobby.sub2" "saved on your devices — never on a server"
"lobby.empty" "no rooms yet — start one below"
"lobby.new.ph" "new room name…"
"lobby.new" "➕ start"
"lobby.join.ph" "…or paste an invite link"
"lobby.join" "join"
"lobby.hint" "links open the room directly in a browser — in the installed app, paste the invite here"
"lobby.version" "version {v}"
"lobby.rename.title" "rename"
"lobby.forget.title" "forget"
"lobby.forget.arm" "sure?"
"lobby.bad-link" "that's not an invite link — paste the full link"
"room.word" "room"
"ago.now" "now"
"ago.m" "{n}m ago"
"ago.h" "{n}h ago"
"ago.d" "{n}d ago"
;; room boot toasts (room.ts)
"toast.offline-delivered" {"one" "⇣ {n} offline message delivered" "other" "⇣ {n} offline messages delivered"}
"toast.rooms-synced" {"one" "⇆ synced {n} room from your other device" "other" "⇆ synced {n} rooms from your other device"}
"toast.migrated" {"one" "⇡ migrated {n} message from the old format" "other" "⇡ migrated {n} messages from the old format"}
"toast.restored" {"one" "⇣ restored {n} message" "other" "⇣ restored {n} messages"}
"toast.mailbox-expired" "some offline messages expired before this device could fetch them"
;; update banner (main.ts)
"update.ready-v" "⬆ version {live} is ready (you're on {v}) — tap to update"
"update.ready" "⬆ a new version is ready — tap to update"
"update.updating" "updating…"
;; social-kit chips/toasts (keys owned by ardegazu-social-kit/src/text.ts)
"social.sheet.title" "invite a friend here"
"social.sheet.here-now" "here now · {app}"
"social.sheet.drop" "will find it in their drop"
"social.sheet.invite" "invite"
"social.sheet.sent" "sent ✓"
"social.sheet.parked" "parked ✓"
"social.chip.join" "friends can join"
"social.chip.join.title" "while on, friends on ardegazu.ro see a join button for this room"
"social.chip.invite" "🫶 invite a friend"
"social.chip.invite.title" "seal an invite for this room to a friend — live or into their drop"
"social.toast.invites-you" "{name} invites you"
"social.toast.join" "join"
"social.toast.share" "share"
"social.toast.copy" "⎘ copy link"
"social.toast.not-now" "not now"
"social.toast.copied" "copied ✓"
"social.toast.come-to" "come to {app}"
"social.toast.come-play" "come play"
"social.invite.join" "come join me in {app}"
"social.paste.chip" "🎟 got an invite?"
"social.paste.chip.title" "paste an invite link — this window joins the room (works installed)"
"social.paste.placeholder" "paste the invite link…"
"social.paste.join" "join"
"social.paste.error" "that's not an invite — paste the whole link"
"social.sheet.share" "share the room link"
"social.sheet.nofriends" "no friends saved yet — anyone with the link can join"
"social.sheet.hub" "find friends on ardegazu.ro"
"social.home.title" "back to the hub — ardegazu.ro"})
|