+5
i18n/en-us/actions.ftl
+5
i18n/en-us/actions.ftl
···
39
39
manage-denylist = Manage blocked identities
40
40
view-events = View all events ordered by recent updates
41
41
view-rsvps = View all RSVPs ordered by recent updates
42
+
import-rsvp = Import RSVP
43
+
nuke-identity = Nuke Identity
44
+
45
+
# Admin confirmations and warnings
46
+
confirm-nuke-identity = Are you sure you want to nuke this identity? This will delete all records and add the handle, PDS, and DID to the denylist.
42
47
43
48
# Event actions
44
49
planned = Planned
+38
i18n/en-us/ui.ftl
+38
i18n/en-us/ui.ftl
···
117
117
page-title-admin = Admin
118
118
page-title-admin-denylist = Admin - Denylist
119
119
page-title-admin-events = Events - Smoke Signal Admin
120
+
page-title-admin-rsvps = RSVPs - Smoke Signal Admin
121
+
page-title-admin-rsvp = RSVP Record - Smoke Signal Admin
122
+
page-title-admin-event = Event Record - Smoke Signal Admin
123
+
page-title-admin-handles = Handles - Smoke Signal Admin
120
124
page-title-create-event = Create Event
121
125
page-title-create-rsvp = Create RSVP
122
126
···
124
128
heading-admin = Admin
125
129
heading-admin-denylist = Denylist
126
130
heading-admin-events = Event Records
131
+
heading-admin-rsvps = RSVP Records
132
+
heading-admin-rsvp = RSVP Record
133
+
heading-admin-event = Event Record
134
+
heading-admin-handles = Handle Records
127
135
heading-create-event = Create Event
128
136
heading-create-rsvp = Create RSVP
129
137
heading-import-event = Import Event by AT-URI
138
+
heading-import-rsvp = Import RSVP
139
+
heading-rsvp-details = RSVP Details
140
+
heading-rsvp-json = RSVP JSON
130
141
131
142
# Status and notification messages
132
143
message-rsvp-recorded = The RSVP has been recorded!
144
+
message-rsvp-import-success = RSVP imported successfully!
145
+
message-view-rsvp = View RSVP
133
146
134
147
# Navigation and breadcrumbs
135
148
nav-home = Home
136
149
nav-events = Events
150
+
nav-rsvps = RSVPs
137
151
nav-admin = Admin
138
152
nav-denylist = Denylist
153
+
nav-handles = Handles
154
+
nav-rsvp-record = RSVP Record
155
+
nav-event-record = Event Record
139
156
140
157
# Table headers
141
158
header-name = Name
142
159
header-updated = Updated
143
160
header-actions = Actions
161
+
header-rsvp = RSVP
162
+
header-event = Event
163
+
header-status = Status
164
+
header-did = DID
165
+
header-handle = Handle
166
+
header-pds = PDS
167
+
header-language = Language
168
+
header-timezone = Timezone
144
169
145
170
# Descriptions and subtitles
146
171
subtitle-admin-events = View all events ordered by recent updates
172
+
subtitle-admin-rsvps = View all RSVPs ordered by recent updates
173
+
subtitle-admin-handles = View known handles
147
174
help-import-aturi = Enter the full AT-URI of the event to import
175
+
help-import-rsvp-aturi = Enter the AT-URI of an RSVP to import - supports both "community.lexicon.calendar.rsvp" and "events.smokesignal.calendar.rsvp" collections
148
176
149
177
# Common UI elements
150
178
greeting = Hello
···
154
182
[one] ({ $count })
155
183
*[other] ({ $count })
156
184
}
185
+
186
+
# Technical labels and identifiers
187
+
label-aturi = AT-URI
188
+
label-cid = CID
189
+
label-did = DID
190
+
label-lexicon = Lexicon
191
+
label-event-aturi = Event AT-URI
192
+
label-event-cid = Event CID
193
+
label-rsvp-details = RSVP Details
194
+
label-rsvp-json = RSVP JSON
+11
i18n/fr-ca/actions.ftl
+11
i18n/fr-ca/actions.ftl
···
41
41
location-type-address = Adresse
42
42
location-type-coordinates = Coordonnées
43
43
location-type-virtual = Virtuel
44
+
45
+
# Actions d'administration
46
+
manage-handles = Gérer les identifiants connus
47
+
manage-denylist = Gérer les identités bloquées
48
+
view-events = Voir tous les événements ordonnés par mises à jour récentes
49
+
view-rsvps = Voir toutes les réponses ordonnées par mises à jour récentes
50
+
import-rsvp = Importer une réponse
51
+
nuke-identity = Éliminer l'identité
52
+
53
+
# Confirmations et avertissements d'administration
54
+
confirm-nuke-identity = Êtes-vous sûr de vouloir éliminer cette identité? Cela supprimera tous les enregistrements et ajoutera l'identifiant, le PDS et le DID à la liste de refus.
+45
i18n/fr-ca/ui.ftl
+45
i18n/fr-ca/ui.ftl
···
4
4
page-title-admin = Administration
5
5
page-title-admin-denylist = Administration - Liste de refus
6
6
page-title-admin-events = Événements - Administration Smoke Signal
7
+
page-title-admin-rsvps = RSVP - Administration Smoke Signal
8
+
page-title-admin-rsvp = Enregistrement RSVP - Administration Smoke Signal
9
+
page-title-admin-event = Enregistrement d'événement - Administration Smoke Signal
10
+
page-title-admin-handles = Identifiants - Administration Smoke Signal
7
11
page-title-create-event = Créer un événement
8
12
page-title-create-rsvp = Créer une réponse
9
13
···
11
15
heading-admin = Administration
12
16
heading-admin-denylist = Liste de refus
13
17
heading-admin-events = Registres d'événements
18
+
heading-admin-rsvps = Registres de réponses
19
+
heading-admin-rsvp = Enregistrement de réponse
20
+
heading-admin-event = Enregistrement d'événement
21
+
heading-admin-handles = Registres d'identifiants
14
22
heading-create-event = Créer un événement
15
23
heading-create-rsvp = Créer une réponse
16
24
heading-import-event = Importer un événement par URI AT
25
+
heading-import-rsvp = Importer une réponse
26
+
heading-rsvp-details = Détails de la réponse
27
+
heading-rsvp-json = JSON de la réponse
17
28
18
29
# Messages de statut et de notification
19
30
message-rsvp-recorded = La réponse a été enregistrée!
31
+
message-rsvp-import-success = Réponse importée avec succès!
32
+
message-view-rsvp = Voir la réponse
33
+
subtitle-admin-events = Voir tous les événements ordonnés par mises à jour récentes
34
+
subtitle-admin-rsvps = Voir toutes les réponses ordonnées par mises à jour récentes
35
+
subtitle-admin-handles = Voir les identifiants connus
36
+
help-import-aturi = Entrer l'URI AT complet de l'événement à importer
37
+
help-import-rsvp-aturi = Entrer l'URI AT de la réponse à importer - supporte les collections "community.lexicon.calendar.rsvp" et "events.smokesignal.calendar.rsvp"
20
38
21
39
# Navigation et fil d'Ariane
22
40
nav-home = Accueil
23
41
nav-events = Événements
42
+
nav-rsvps = Réponses
24
43
nav-profile = Profil
25
44
nav-settings = Paramètres
26
45
nav-admin = Administration
27
46
nav-denylist = Liste de refus
47
+
nav-handles = Identifiants
48
+
nav-rsvp-record = Enregistrement de réponse
49
+
nav-event-record = Enregistrement d'événement
28
50
29
51
# Messages de contenu
30
52
member-since = Membre depuis
···
66
88
[one] ({ $count })
67
89
*[other] ({ $count })
68
90
}
91
+
92
+
# En-têtes de tableau
93
+
header-name = Nom
94
+
header-updated = Mis à jour
95
+
header-actions = Actions
96
+
header-rsvp = Réponse
97
+
header-event = Événement
98
+
header-status = Statut
99
+
header-did = DID
100
+
header-handle = Identifiant
101
+
header-pds = PDS
102
+
header-language = Langue
103
+
header-timezone = Fuseau horaire
104
+
105
+
# Étiquettes techniques et identifiants
106
+
label-aturi = URI AT
107
+
label-cid = CID
108
+
label-did = DID
109
+
label-lexicon = Lexicon
110
+
label-event-aturi = URI AT de l'événement
111
+
label-event-cid = CID de l'événement
112
+
label-rsvp-details = Détails de la réponse
113
+
label-rsvp-json = JSON de la réponse
+5
-5
templates/admin_event.en-us.html
+5
-5
templates/admin_event.en-us.html
···
1
1
{% extends "base.en-us.html" %}
2
-
{% block title %}Event Record - Smoke Signal Admin{% endblock %}
2
+
{% block title %}{{ t(key="page-title-admin-event", locale=locale) }}{% endblock %}
3
3
{% block head %}
4
4
<style>
5
5
pre {
···
14
14
<div class="container">
15
15
<nav class="breadcrumb" aria-label="breadcrumbs">
16
16
<ul>
17
-
<li><a href="/admin">Admin</a></li>
18
-
<li><a href="/admin/events">Events</a></li>
19
-
<li class="is-active"><a href="#" aria-current="page">Event Record</a></li>
17
+
<li><a href="/admin">{{ t(key="nav-admin", locale=locale) }}</a></li>
18
+
<li><a href="/admin/events">{{ t(key="nav-events", locale=locale) }}</a></li>
19
+
<li class="is-active"><a href="#" aria-current="page">{{ t(key="nav-event-record", locale=locale) }}</a></li>
20
20
</ul>
21
21
</nav>
22
22
</div>
···
24
24
<section class="section">
25
25
<div class="container">
26
26
<div class="content">
27
-
<h1 class="title">Event Record</h1>
27
+
<h1 class="title">{{ t(key="heading-admin-event", locale=locale) }}</h1>
28
28
<div class="box">
29
29
<pre><code>{{ event_json }}</code></pre>
30
30
</div>
+14
-14
templates/admin_handles.en-us.html
+14
-14
templates/admin_handles.en-us.html
···
1
1
{% extends "base.en-us.html" %}
2
2
{% include 'pagination.html' %}
3
-
{% block title %}Handles - Smoke Signal Admin{% endblock %}
3
+
{% block title %}{{ t(key="page-title-admin-handles", locale=locale) }}{% endblock %}
4
4
{% block head %}{% endblock %}
5
5
{% block content %}
6
6
<section class="section">
7
7
<div class="container">
8
8
<nav class="breadcrumb" aria-label="breadcrumbs">
9
9
<ul>
10
-
<li><a href="/admin">Admin</a></li>
11
-
<li class="is-active"><a href="#" aria-current="page">Handles</a></li>
10
+
<li><a href="/admin">{{ t(key="nav-admin", locale=locale) }}</a></li>
11
+
<li class="is-active"><a href="#" aria-current="page">{{ t(key="nav-handles", locale=locale) }}</a></li>
12
12
</ul>
13
13
</nav>
14
14
</div>
···
16
16
<section class="section">
17
17
<div class="container">
18
18
<div class="content">
19
-
<h1 class="title">Handle Records ({{ total_count }})</h1>
20
-
<p class="subtitle">View known handles</p>
19
+
<h1 class="title">{{ t(key="heading-admin-handles", locale=locale) }} {{ t(key="total-count", count=total_count, locale=locale) }}</h1>
20
+
<p class="subtitle">{{ t(key="subtitle-admin-handles", locale=locale) }}</p>
21
21
22
22
<table class="table is-fullwidth">
23
23
<thead>
24
24
<tr>
25
-
<th>DID</th>
26
-
<th>Handle</th>
27
-
<th>PDS</th>
28
-
<th>Language</th>
29
-
<th>Timezone</th>
30
-
<th>Updated</th>
31
-
<th>Actions</th>
25
+
<th>{{ t(key="header-did", locale=locale) }}</th>
26
+
<th>{{ t(key="header-handle", locale=locale) }}</th>
27
+
<th>{{ t(key="header-pds", locale=locale) }}</th>
28
+
<th>{{ t(key="header-language", locale=locale) }}</th>
29
+
<th>{{ t(key="header-timezone", locale=locale) }}</th>
30
+
<th>{{ t(key="header-updated", locale=locale) }}</th>
31
+
<th>{{ t(key="header-actions", locale=locale) }}</th>
32
32
</tr>
33
33
</thead>
34
34
<tbody>
···
43
43
<td>
44
44
<button class="button is-danger is-small"
45
45
hx-post="/admin/handles/nuke/{{ handle.did }}"
46
-
hx-confirm="Are you sure you want to nuke this identity? This will delete all records and add the handle, PDS, and DID to the denylist."
46
+
hx-confirm="{{ t(key="confirm-nuke-identity", locale=locale) }}"
47
47
hx-target="body"
48
48
data-loading-disable
49
49
data-loading-class="is-loading">
50
-
Nuke Identity
50
+
{{ t(key="nuke-identity", locale=locale) }}
51
51
</button>
52
52
</td>
53
53
</tr>
+15
-15
templates/admin_rsvp.en-us.html
+15
-15
templates/admin_rsvp.en-us.html
···
1
1
{% extends "base.en-us.html" %}
2
-
{% block title %}RSVP Record - Smoke Signal Admin{% endblock %}
2
+
{% block title %}{{ t(key="page-title-admin-rsvp", locale=locale) }}{% endblock %}
3
3
{% block head %}
4
4
<style>
5
5
pre {
···
14
14
<div class="container">
15
15
<nav class="breadcrumb" aria-label="breadcrumbs">
16
16
<ul>
17
-
<li><a href="/admin">Admin</a></li>
18
-
<li><a href="/admin/rsvps">RSVPs</a></li>
19
-
<li class="is-active"><a href="#" aria-current="page">RSVP Record</a></li>
17
+
<li><a href="/admin">{{ t(key="nav-admin", locale=locale) }}</a></li>
18
+
<li><a href="/admin/rsvps">{{ t(key="nav-rsvps", locale=locale) }}</a></li>
19
+
<li class="is-active"><a href="#" aria-current="page">{{ t(key="nav-rsvp-record", locale=locale) }}</a></li>
20
20
</ul>
21
21
</nav>
22
22
</div>
···
24
24
<section class="section">
25
25
<div class="container">
26
26
<div class="content">
27
-
<h1 class="title">RSVP Record</h1>
27
+
<h1 class="title">{{ t(key="heading-admin-rsvp", locale=locale) }}</h1>
28
28
29
29
<div class="columns">
30
30
<div class="column is-half">
31
31
<div class="box">
32
-
<h2 class="subtitle">RSVP Details</h2>
32
+
<h2 class="subtitle">{{ t(key="heading-rsvp-details", locale=locale) }}</h2>
33
33
<table class="table is-fullwidth">
34
34
<tbody>
35
35
<tr>
36
-
<th>AT-URI</th>
36
+
<th>{{ t(key="label-aturi", locale=locale) }}</th>
37
37
<td><code>{{ rsvp.aturi }}</code></td>
38
38
</tr>
39
39
<tr>
40
-
<th>CID</th>
40
+
<th>{{ t(key="label-cid", locale=locale) }}</th>
41
41
<td><code>{{ rsvp.cid }}</code></td>
42
42
</tr>
43
43
<tr>
44
-
<th>DID</th>
44
+
<th>{{ t(key="label-did", locale=locale) }}</th>
45
45
<td><a href="/{{ rsvp.did }}"><code>{{ rsvp.did }}</code></a></td>
46
46
</tr>
47
47
<tr>
48
-
<th>Lexicon</th>
48
+
<th>{{ t(key="label-lexicon", locale=locale) }}</th>
49
49
<td><code>{{ rsvp.lexicon }}</code></td>
50
50
</tr>
51
51
<tr>
52
-
<th>Status</th>
52
+
<th>{{ t(key="header-status", locale=locale) }}</th>
53
53
<td>{{ rsvp.status }}</td>
54
54
</tr>
55
55
<tr>
56
-
<th>Event AT-URI</th>
56
+
<th>{{ t(key="label-event-aturi", locale=locale) }}</th>
57
57
<td><a href="/admin/event?aturi={{ rsvp.event_aturi }}"><code>{{ rsvp.event_aturi }}</code></a></td>
58
58
</tr>
59
59
<tr>
60
-
<th>Event CID</th>
60
+
<th>{{ t(key="label-event-cid", locale=locale) }}</th>
61
61
<td><code>{{ rsvp.event_cid }}</code></td>
62
62
</tr>
63
63
<tr>
64
-
<th>Updated</th>
64
+
<th>{{ t(key="header-updated", locale=locale) }}</th>
65
65
<td>{{ rsvp.updated_at }}</td>
66
66
</tr>
67
67
</tbody>
···
70
70
</div>
71
71
<div class="column is-half">
72
72
<div class="box">
73
-
<h2 class="subtitle">RSVP JSON</h2>
73
+
<h2 class="subtitle">{{ t(key="heading-rsvp-json", locale=locale) }}</h2>
74
74
<pre><code>{{ rsvp_json }}</code></pre>
75
75
</div>
76
76
</div>
+16
-16
templates/admin_rsvps.en-us.html
+16
-16
templates/admin_rsvps.en-us.html
···
1
1
{% extends "base.en-us.html" %}
2
2
{% include 'pagination.html' %}
3
-
{% block title %}RSVPs - Smoke Signal Admin{% endblock %}
3
+
{% block title %}{{ t(key="page-title-admin-rsvps", locale=locale) }}{% endblock %}
4
4
{% block head %}{% endblock %}
5
5
{% block content %}
6
6
<section class="section">
7
7
<div class="container">
8
8
<nav class="breadcrumb" aria-label="breadcrumbs">
9
9
<ul>
10
-
<li><a href="/admin">Admin</a></li>
11
-
<li class="is-active"><a href="#" aria-current="page">RSVPs</a></li>
10
+
<li><a href="/admin">{{ t(key="nav-admin", locale=locale) }}</a></li>
11
+
<li class="is-active"><a href="#" aria-current="page">{{ t(key="nav-rsvps", locale=locale) }}</a></li>
12
12
</ul>
13
13
</nav>
14
14
</div>
···
17
17
<section class="section">
18
18
<div class="container">
19
19
<div class="content">
20
-
<h1 class="title">RSVP Records ({{ total_count }})</h1>
21
-
<p class="subtitle">View all RSVPs ordered by recent updates</p>
20
+
<h1 class="title">{{ t(key="heading-admin-rsvps", locale=locale) }} {{ t(key="total-count", count=total_count, locale=locale) }}</h1>
21
+
<p class="subtitle">{{ t(key="subtitle-admin-rsvps", locale=locale) }}</p>
22
22
23
23
{% if import_success %}
24
24
<article class="message is-success">
···
27
27
<span class="icon">
28
28
<i class="fas fa-check-circle"></i>
29
29
</span>
30
-
<span>RSVP imported successfully! <a href="/admin/rsvp?aturi={{ imported_aturi }}">View RSVP</a></span>
30
+
<span>{{ t(key="message-rsvp-import-success", locale=locale) }} <a href="/admin/rsvp?aturi={{ imported_aturi }}">{{ t(key="message-view-rsvp", locale=locale) }}</a></span>
31
31
</span>
32
32
</div>
33
33
</article>
34
34
{% endif %}
35
35
36
36
<div class="box">
37
-
<h2 class="subtitle">Import RSVP</h2>
37
+
<h2 class="subtitle">{{ t(key="heading-import-rsvp", locale=locale) }}</h2>
38
38
<form method="post" action="/admin/rsvps/import">
39
39
<div class="field">
40
-
<label class="label">RSVP AT-URI</label>
40
+
<label class="label">{{ t(key="label-rsvp-aturi", locale=locale) }}</label>
41
41
<div class="control">
42
42
<input class="input" type="text" name="aturi" placeholder="at://did:plc:abcdef/community.lexicon.calendar.rsvp/3jizzrxoalv2h" required>
43
43
</div>
44
-
<p class="help">Enter the AT-URI of an RSVP to import - supports both "community.lexicon.calendar.rsvp" and "events.smokesignal.calendar.rsvp" collections</p>
44
+
<p class="help">{{ t(key="help-import-rsvp-aturi", locale=locale) }}</p>
45
45
</div>
46
46
<div class="field">
47
47
<div class="control">
48
-
<button class="button is-primary" type="submit">Import RSVP</button>
48
+
<button class="button is-primary" type="submit">{{ t(key="import-rsvp", locale=locale) }}</button>
49
49
</div>
50
50
</div>
51
51
</form>
···
54
54
<table class="table is-fullwidth">
55
55
<thead>
56
56
<tr>
57
-
<th>RSVP</th>
58
-
<th>Event</th>
59
-
<th>Status</th>
60
-
<th>Updated</th>
61
-
<th>Actions</th>
57
+
<th>{{ t(key="header-rsvp", locale=locale) }}</th>
58
+
<th>{{ t(key="header-event", locale=locale) }}</th>
59
+
<th>{{ t(key="header-status", locale=locale) }}</th>
60
+
<th>{{ t(key="header-updated", locale=locale) }}</th>
61
+
<th>{{ t(key="header-actions", locale=locale) }}</th>
62
62
</tr>
63
63
</thead>
64
64
<tbody>
···
71
71
<td>
72
72
<div class="buttons">
73
73
<a href="/admin/rsvp?aturi={{ rsvp.aturi }}" class="button is-small is-info">
74
-
View
74
+
{{ t(key="view", locale=locale) }}
75
75
</a>
76
76
</div>
77
77
</td>