summaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
Diffstat (limited to 'views')
-rwxr-xr-xviews/404.handlebars4
-rw-r--r--views/createEventMagicLink.handlebars10
-rwxr-xr-xviews/event.handlebars139
-rwxr-xr-xviews/eventgroup.handlebars70
-rwxr-xr-xviews/home.handlebars52
-rwxr-xr-xviews/layouts/main.handlebars2
-rwxr-xr-xviews/newevent.handlebars22
-rwxr-xr-xviews/optionsform.handlebars16
-rw-r--r--views/partials/editeventgroupmodal.handlebars10
-rw-r--r--views/partials/editeventmodal.handlebars10
-rwxr-xr-xviews/partials/eventForm.handlebars74
-rw-r--r--views/partials/eventGroupForm.handlebars32
-rw-r--r--views/partials/eventList.handlebars2
-rw-r--r--views/partials/importeventform.handlebars14
-rw-r--r--views/partials/instanceRules.handlebars2
-rwxr-xr-xviews/partials/sidebar.handlebars6
-rw-r--r--views/publicEventList.handlebars14
17 files changed, 231 insertions, 248 deletions
diff --git a/views/404.handlebars b/views/404.handlebars
index ec8fcb5..8b821c3 100755
--- a/views/404.handlebars
+++ b/views/404.handlebars
@@ -1,4 +1,4 @@
<main class="page">
- <h1>404 - Event not found</h1>
- <p>It may have never existed, or it's been removed from the server. Don't despair - why not create a new one? I for one would love to come to your ocarina recital.</p>
+ <h1>{{t "404.notfound"}}</h1>
+ <p>{{t "404.desc"}}</p>
</main>
diff --git a/views/createEventMagicLink.handlebars b/views/createEventMagicLink.handlebars
index d0a0a49..59017eb 100644
--- a/views/createEventMagicLink.handlebars
+++ b/views/createEventMagicLink.handlebars
@@ -1,5 +1,5 @@
<main class="page">
- <h2 class="mb-4">Request a link to create a new event</h2>
+ <h2 class="mb-4">{{t "ml.requestml" }}</h2>
<form
action="/magic-link/event/create"
@@ -8,7 +8,7 @@
hx-target="article"
>
<p>
- The administrator of this instance has limited event creation to a set of specific email addresses. If your email address is allowed to create events, you will be sent a magic link. If not, you won't receive anything.
+ {{t "ml.requestmldesc" }}
</p>
<p>
If you run into any issues, please contact the instance administrator.
@@ -19,11 +19,11 @@
</div>
{{/if}}
<div class="form-group">
- <label for="email">Email address</label>
- <input type="email" class="form-control" id="email" placeholder="Email address" required name="email">
+ <label for="email">{{t "emailaddr" }}</label>
+ <input type="email" class="form-control" id="email" placeholder="{{t "emailaddr" }}" required name="email">
</div>
<div class="form-group text-center">
- <button type="submit" class="button button--primary w-50">Request magic link</button>
+ <button type="submit" class="button button--primary w-50">{{t "ml.requestmlbutton" }}</button>
</div>
</form>
</main>
diff --git a/views/event.handlebars b/views/event.handlebars
index 1b1022e..e78ce88 100755
--- a/views/event.handlebars
+++ b/views/event.handlebars
@@ -11,7 +11,7 @@
</div>
<div class="col-lg-3 ml-2 edit-buttons">
{{#if editingEnabled}}
- <button type="button" id="editEvent" class="button button--primary ml-auto d-block" {{#if eventHasConcluded}}disabled{{/if}} data-event-id="{{eventData.id}}" data-toggle="modal" data-target="#editModal"><i class="fas fa-edit"></i> Edit event</button>
+ <button type="button" id="editEvent" class="button button--primary ml-auto d-block" {{#if eventHasConcluded}}disabled{{/if}} data-event-id="{{eventData.id}}" data-toggle="modal" data-target="#editModal"><i class="fas fa-edit"></i> {{t "eventedit"}}</button>
{{/if}}
</div>
</div>
@@ -39,7 +39,7 @@
<time class="dt-end" datetime="{{eventEndISO}}"></time>
<br>
<span class="text-muted">
- {{#if eventHasBegun}}{{#unless eventHasConcluded}}Started {{else}}Ended {{/unless}}{{/if}}{{fromNow}}
+ {{#if eventHasBegun}}{{#unless eventHasConcluded}}{{t "event.started"}} {{else}}{{t "event.ended"}} {{/unless}}{{/if}}{{fromNow}}
</span>
</li>
{{#if eventHasHost}}
@@ -47,7 +47,7 @@
<span class="fa-li">
<i class="fas fa-fw fa-user-circle"></i>
</span>
- <span class="text-muted">Hosted by</span> {{eventData.hostName}}
+ <span class="text-muted">{{{t "event.hostedby" }}}
</li>
{{/if}}
{{#if eventData.eventGroup}}
@@ -55,7 +55,7 @@
<span class="fa-li">
<i class="fas fa-fw fa-calendar-alt"></i>
</span>
- <span class="text-muted">Part of</span> <a href="/group/{{eventData.eventGroup.id}}">{{eventData.eventGroup.name}}</a>
+ <span class="text-muted">{{{t "event.partof" }}}</span>
</li>
{{/if}}
{{#if eventData.url}}
@@ -74,7 +74,7 @@
</span>
<a class="u-url" href="https://{{domain}}/{{eventData.id}}">https://{{domain}}/{{eventData.id}}</a>
<button type="button" id="copyEventLink" class="eventInformationAction button button--outline-secondary button--sm" data-clipboard-text="https://{{domain}}/{{eventData.id}}">
- <i class="fas fa-copy"></i> Copy
+ <i class="fas fa-copy"></i> {{t "copy" }}
</button>
</li>
{{#if isFederated}}
@@ -84,7 +84,7 @@
</span>
@{{eventData.id}}@{{domain}}
<button type="button" id="copyAPLink" class="eventInformationAction button button--outline-secondary button--sm" data-clipboard-text="@{{eventData.id}}@{{domain}}">
- <i class="fas fa-copy"></i> Copy
+ <i class="fas fa-copy"></i> {{t "copy" }}
</button>
</li>
{{/if}}
@@ -94,16 +94,16 @@
<aside id="event__actions">
<div class="button-stack" role="group" aria-label="Event actions">
<a href="http://www.google.com/calendar/event?action=TEMPLATE&dates={{parsedStart}}%2F{{parsedEnd}}&text={{escapedName}}&location={{parsedLocation}}&ctz={{timezone}}" class="button button--outline-secondary button--sm">
- <i class="far fa-calendar-plus"></i> Add to Google Calendar
+ <i class="far fa-calendar-plus"></i> {{t "event.addtoGC" }}
</a>
<button type="button" id="exportICS" class="button button--outline-secondary button--sm" data-event-id="{{eventData.id}}">
- <i class="fas fa-download"></i> Export as ICS
+ <i class="fas fa-download"></i> {{t "event.ICSexport" }}
</button>
<a target="_blank" href="http://maps.google.com/?q={{parsedLocation}}" class="button button--outline-secondary button--sm">
- <i class="fas fa-map-marked"></i> Show on Google Maps
+ <i class="fas fa-map-marked"></i> {{t "event.showonGM" }}
</a>
<a target="_blank" href="https://www.openstreetmap.org/search?query={{parsedLocation}}" class="button button--outline-secondary button--sm">
- <i class="fas fa-map-marked"></i> Show on OpenStreetMap
+ <i class="fas fa-map-marked"></i> {{t "event.showonOM" }}
</a>
</div>
@@ -115,21 +115,20 @@
{{#if eventHasConcluded}}
<div class="alert alert-warning mb-4" role="alert">
- This event has concluded. It can no longer be edited{{#if eventWillBeDeleted}}, and will be automatically deleted {{daysUntilDeletion}}{{/if}}.
-</div>
+{{t "event.concludeddel" }}</div>
{{/if}}
{{#if firstLoad}}
<div class="alert alert-success alert-dismissible fade show" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
- <p>Welcome to your event!</p>
- <p>Your secret editing password for this event is: <strong id="eventEditToken">{{eventData.editToken}}</strong>. It's been saved in your browser storage, and if you supplied your email, it's also been sent to you. If you didn't supply your email, you <strong>must save it somewhere safe</strong>, because it won't be shown again!</p>
- <p>To share your event, use the link you can see just above this message - that way your attendees won't be able to edit or delete your event!</p>
+ <p>{{t "event.welcome" }}</p>
+ <p>{{t "event.attention" }}</p>
+ <p>{{t "event.share" }}</p>
</div>
{{/if}}
<div class="card mb-4" id="eventDescription">
- <h5 class="card-header">About</h5>
+ <h5 class="card-header">{{t "about" }}</h5>
<div class="card-body p-summary">
{{{parsedDescription}}}
</div>
@@ -137,30 +136,30 @@
{{#if eventData.usersCanAttend}}
<div class="card mb-4" id="eventAttendees">
- <h5 class="card-header">Attendees {{#if numberOfAttendees}}({{numberOfAttendees}}){{/if}}
+ <h5 class="card-header">{{t "event.attendees" }} {{#if numberOfAttendees}}({{numberOfAttendees}}){{/if}}
<div class="button--group" role="group" aria-label="Attendance controls">
{{#unless noMoreSpots}}
- <button type="button" id="attendEvent" class="button button--primary" data-event-id="{{eventData.id}}"><i class="fas fa-user-plus"></i> Add me</button>
+ <button type="button" id="attendEvent" class="button button--primary" data-event-id="{{eventData.id}}"><i class="fas fa-user-plus"></i> {{t "event.addme" }}</button>
{{/unless}}
- <button type="button" id="unattendEvent" class="button button--secondary" data-toggle="modal" data-target="#unattendModal"><i class="fas fa-user-times"></i> Remove me</button>
+ <button type="button" id="unattendEvent" class="button button--secondary" data-toggle="modal" data-target="#unattendModal"><i class="fas fa-user-times"></i> {{t "event.removeme" }}</button>
</div>
</h5>
<div class="card-body text-center">
{{#if eventData.maxAttendees}}
{{#if noMoreSpots}}
- <div class="alert alert-warning text-center" id="attendees-alert">This event is at capacity.</div>
+ <div class="alert alert-warning text-center" id="attendees-alert">{{t "event.capacity" }}</div>
{{else}}
- <div class="alert alert-warning text-center" id="attendees-alert">{{spotsRemaining}} {{plural spotsRemaining "spot(s)"}} remaining - add yourself now!</div>
+ <div class="alert alert-warning text-center" id="attendees-alert">{{t "event.remaining" }}</div>
{{/if}}
{{/if}}
{{#if numberOfAttendees}}
<ul class="attendeesList">
{{#each visibleAttendees}}
- <li{{#if ../editingEnabled}} data-attendee-name="{{this.name}}" data-attendee-id="{{this._id}}"{{/if}}><span class="attendee-name">{{this.name}}</span>{{#if ../editingEnabled}} <a href="#" class="remove-attendee" data-toggle="modal" data-target="#removeAttendeeModal" title="Remove user from event"><i class="fas fa-user-times"></i></a>{{/if}}</li>
+ <li{{#if ../editingEnabled}} data-attendee-name="{{this.name}}" data-attendee-id="{{this._id}}"{{/if}}><span class="attendee-name">{{this.name}}</span>{{#if ../editingEnabled}} <a href="#" class="remove-attendee" data-toggle="modal" data-target="#removeAttendeeModal" title="{{t "event.removeuser" }}"><i class="fas fa-user-times"></i></a>{{/if}}</li>
{{/each}}
{{#if editingEnabled}}
{{#each hiddenAttendees}}
- <li{{#if ../editingEnabled}} data-attendee-name="{{this.name}}" data-attendee-id="{{this._id}}"{{/if}} class="hidden-attendee"><span class="attendee-name">{{this.name}} (hidden from public list)</span>{{#if ../editingEnabled}} <a href="#" class="remove-attendee" data-toggle="modal" data-target="#removeAttendeeModal" title="Remove user from event"><i class="fas fa-user-times"></i></a>{{/if}}</li>
+ <li{{#if ../editingEnabled}} data-attendee-name="{{this.name}}" data-attendee-id="{{this._id}}"{{/if}} class="hidden-attendee"><span class="attendee-name">{{this.name}} (hidden from public list)</span>{{#if ../editingEnabled}} <a href="#" class="remove-attendee" data-toggle="modal" data-target="#removeAttendeeModal" title="{{t "event.removeuser" }}"><i class="fas fa-user-times"></i></a>{{/if}}</li>
{{/each}}
{{/if}}
</ul>
@@ -170,7 +169,7 @@
{{/if}}
{{/unless}}
{{else}}
- <p class="text-center text-muted mb-0">No attendees yet!</p>
+ <p class="text-center text-muted mb-0">{{t "event.noattendees" }}</p>
{{/if}}
</div>
</div>
@@ -179,7 +178,7 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="attendModalLabel">Add yourself to '{{eventData.name}}'</h5>
+ <h5 class="modal-title" id="attendModalLabel">{{t "event.addself" }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -187,22 +186,22 @@
<form id="attendEventForm" action="/attendevent/{{eventData.id}}" method="post">
<div class="modal-body">
<div class="form-group">
- <label for="attendeeName">Your name</label>
+ <label for="attendeeName">{{t "event.attendeename" }}</label>
<div class="form-group">
- <input type="text" class="form-control" id="attendeeName" name="attendeeName" placeholder="Or an alias, perhaps..." data-validation="required length" data-validation-length="1-30">
+ <input type="text" class="form-control" id="attendeeName" name="attendeeName" placeholder="{{t "event.attendeenamedesc" }}" data-validation="required length" data-validation-length="1-30">
</div>
</div>
<div class="form-group">
- <label for="attendeeName">How many people in your party?</label>
+ <label for="attendeeName">{{t "event.attendeenum" }}</label>
<div class="form-group">
<input type="number" class="form-control" id="attendeeNumber" name="attendeeNumber" value="1" data-validation="required number" >
</div>
</div>
<div class="form-group">
- <label for="attendeeEmail">Your email (optional)</label>
- <p class="form-text small">If you provide your email, you will receive updates to the event.</p>
+ <label for="attendeeEmail">{{t "event.attendeeemail" }}</label>
+ <p class="form-text small">{{t "joinemaildesc" }}</p>
<div class="form-group">
- <input type="email" class="form-control" id="attendeeEmail" name="attendeeEmail" placeholder="We won't spam you <3" data-validation="email" data-validation-optional="true">
+ <input type="email" class="form-control" id="attendeeEmail" name="attendeeEmail" placeholder="{{t "event.nospam" }} <3" data-validation="email" data-validation-optional="true">
</div>
</div>
<div class="form-check">
@@ -213,15 +212,15 @@
<p class="form-text small">If you choose to hide your name, only the event organiser will be able to see it.</p>
</div>
<div class="form-group">
- <label for="removalPassword">Deletion password</label>
- <p class="form-text small">You can use this password to remove yourself from the list of event attendees. If you provided your email, you'll receive it by email. Otherwise, write it down now because it will <strong>not be shown again</strong>.</p>
+ <label for="removalPassword">{{t "event.removepswd" }}</label>
+ <p class="form-text small">{{t "event.removepswddesc" }}</p>
<input type="text" class="form-control" readonly id="removalPassword"
name="removalPassword">
</div>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--primary">Add myself</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--primary">{{t "event.addmyself" }}</button>
</div>
</form>
</div>
@@ -232,7 +231,7 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="unattendModalLabel">Remove yourself from '{{eventData.name}}'</h5>
+ <h5 class="modal-title" id="unattendModalLabel">{{{t "event.removemyselfdesc" }}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -240,15 +239,15 @@
<form id="unattendEventForm" x-on:submit.prevent="fetch(`/event/attendee/{{eventData.id}}?${new URLSearchParams({ p: password }).toString()}`, { method: 'DELETE' }).then(response => response.ok ? window.location.reload() : response.json()).then(data => message = data)">
<div class="modal-body">
<div class="form-group">
- <label for="removalPassword" class="form-label">Your deletion password</label>
- <p class="form-text small">Lost your password? Get in touch with the event organiser.</p>
+ <label for="removalPassword" class="form-label">{{t "event.removepswd" }}</label>
+ <p class="form-text small">{{t "event.lostpswd" }}</p>
<div x-bind:class="{ 'alert-danger': message?.error, 'alert-success': message?.success }" class="alert" x-text="message?.error || message?.success" x-show="message?.error || message?.success"></div>
<input type="password" class="form-control" id="removalPassword" name="removalPassword" x-model="password" required>
</div>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--primary">Remove myself</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--primary">{{t "event.removemyself" }}</button>
</div>
</form>
</div>
@@ -260,18 +259,18 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="removeAttendeeModalLabel">Remove attendee from '{{eventData.name}}'</h5>
+ <h5 class="modal-title" id="removeAttendeeModalLabel">{{t "event.removeattendeedesc" }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form id="removeAttendeeForm" action="/removeattendee/{{eventData.id}}/" method="post">
<div class="modal-body">
- <p>Are you sure you want to remove this attendee from the event? This action cannot be undone.</p>
+ <p>{{t "event.confremoveattendee" }}</p>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--danger">Remove attendee</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--danger">{{t "event.removeAttendee" }}</button>
</div>
</form>
</div>
@@ -283,19 +282,19 @@
{{#if eventData.usersCanComment}}
<div class="card mb-4" id="eventComments">
- <h5 class="card-header">Discussion</h5>
+ <h5 class="card-header">{{t "event.discussion" }}</h5>
<div class="card-body">
<form id="commentForm" action="/post/comment/{{eventData.id}}/" method="post">
- <label for="commentAuthor">Name</label>
+ <label for="commentAuthor">{{t "event.attendeename" }}</label>
<div class="form-group">
- <input type="text" class="form-control" id="commentAuthor" name="commentAuthor" placeholder="Your name" required>
+ <input type="text" class="form-control" id="commentAuthor" name="commentAuthor" placeholder="{{t "event.attendeename" }}" required>
</div>
- <label for="commentContent">Comment</label>
+ <label for="commentContent">{{t "event.comment" }}</label>
<div class="form-group">
<div class="d-flex flex-gap">
- <textarea class="form-control" id="commentContent" name="commentContent" style="resize: none;" placeholder="What would you like to say?" required></textarea>
+ <textarea class="form-control" id="commentContent" name="commentContent" style="resize: none;" placeholder="{{t "event.commentcontent" }}" required></textarea>
<div class="input-group-append">
- <button type="submit" class="button button--primary" id="postComment">Send <i class="fas fa-chevron-right"></i></button>
+ <button type="submit" class="button button--primary" id="postComment">{{t "event.postbutton" }} <i class="fas fa-chevron-right"></i></button>
</div>
</div>
</div>
@@ -325,12 +324,12 @@
</div>
<div class="col-lg-3 commentMetadata text-right">
<button type="button" class="button button--outline button--sm openReplyBox">
- <i class="fas fa-comment"></i> Reply
+ <i class="fas fa-comment"></i> {{t "event.reply" }}
</button>
{{#if ../editingEnabled}}
<form class="d-inline" action="/deletecomment/{{../eventData.id}}/{{this._id}}/{{../eventData.editToken}}" method="post">
<button type="submit" class="button button--outline button--sm deleteComment">
- <i class="fas fa-trash"></i> Delete
+ <i class="fas fa-trash"></i> {{t "del" }}
</button>
</form>
{{/if}}
@@ -340,14 +339,14 @@
<div class="col-md">
<form id="replyForm" action="/post/reply/{{../eventData.id}}/{{this._id}}" method="post">
<div class="form-group">
- <input type="text" class="form-control form-control-sm" id="replyAuthor" name="replyAuthor" placeholder="Your name" required>
+ <input type="text" class="form-control form-control-sm" id="replyAuthor" name="replyAuthor" placeholder="Y{{t "event.attendeename" }}" required>
</div>
<div class="form-group">
<div class="d-flex flex-gap">
- <textarea class="form-control form-control-sm" id="replyContent" name="replyContent" style="resize: none;" placeholder="What would you like to reply?" required></textarea>
+ <textarea class="form-control form-control-sm" id="replyContent" name="replyContent" style="resize: none;" placeholder="{{t "event.replycontent" }}" required></textarea>
<div class="input-group-append">
- <button type="submit" class="button button--primary button--sm" id="postReply">Reply <i class="fas fa-chevron-right"></i></button>
</div>
+ <button type="submit" class="button button--primary button--sm" id="postReply">{{t "reply" }} <i class="fas fa-chevron-right"></i></button>
</div>
</div>
</form>
@@ -365,7 +364,7 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="editTokenModalLabel">Enter editing password</h5>
+ <h5 class="modal-title" id="editTokenModalLabel">{{t "edittoken" }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -373,9 +372,9 @@
<form id="verifyTokenForm" action="/verifytoken/event/{{eventData.id}}" method="post">
<div class="modal-body">
<div class="form-group">
- <p class="form-text small">Enter the editing password you received by email or were shown when the event was created.</p>
+ <p class="form-text small">{{t "edittokendesc" }}</p>
<div class="form-group">
- <input type="text" class="form-control" id="editToken" name="editToken" placeholder="Get it right!" data-validation="required">
+ <input type="text" class="form-control" id="editToken" name="editToken" placeholder="{{t "right" }}" data-validation="required">
</div>
<div class="form-group">
<div class="alert alert-danger" style="display:none;"></div>
@@ -383,8 +382,8 @@
</div>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--primary">Edit event</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--primary">{{t "event.edit" }}</button>
</div>
</form>
</div>
@@ -400,18 +399,18 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="deleteModalLabel">Delete '{{eventData.name}}'</h5>
+ <h5 class="modal-title" id="deleteModalLabel">{{t "del" }} '{{eventData.name}}'</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form id="deleteEventForm" action="/deleteevent/{{eventData.id}}/{{eventData.editToken}}" method="post">
<div class="modal-body">
- <p>Are you sure you want to delete this event? This action cannot be undone.</p>
+ <p>{{t "event.delconfirm" }}</p>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--danger">Delete event</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--danger">{{t "event.del" }}</button>
</div>
</form>
</div>
@@ -531,13 +530,13 @@ window.eventData = {{{ json jsonData }}};
})
})
$("#copyEventLink").click(function(){
- $(this).html('<i class="fas fa-copy"></i> Copied!');
- setTimeout(function(){ $("#copyEventLink").html('<i class="fas fa-copy"></i> Copy');}, 5000);
+ $(this).html('<i class="fas fa-copy"></i> {{t "copied" }}');
+ setTimeout(function(){ $("#copyEventLink").html('<i class="fas fa-copy"></i> {{t "copy" }}');}, 5000);
})
new ClipboardJS('#copyAPLink');
$("#copyAPLink").click(function(){
- $(this).html('<i class="fas fa-copy"></i> Copied!');
- setTimeout(function(){ $("#copyAPLink").html('<i class="fas fa-copy"></i> Copy');}, 5000);
+ $(this).html('<i class="fas fa-copy"></i> {{t "copied" }}');
+ setTimeout(function(){ $("#copyAPLink").html('<i class="fas fa-copy"></i> {{t "copy" }}');}, 5000);
})
if ($("#joinCheckbox").is(':checked')){
$("#maxAttendeesCheckboxContainer").css("display","flex");
@@ -553,7 +552,7 @@ window.eventData = {{{ json jsonData }}};
if (response.data.freeSpots !== undefined) {
modal.find('#attendeeNumber')
.attr('data-validation-allowing', `range[1;${response.data.freeSpots}]`)
- .attr('data-validation-error-msg', `Please enter a number between 1 and ${response.data.freeSpots}`);
+ .attr('data-validation-error-msg', `{{t "event.numlimit" }}`);
}
modal.modal();
})
@@ -578,7 +577,7 @@ window.eventData = {{{ json jsonData }}};
}
},
error: function(response, status, xhr) {
- form.find('.alert').text('That editing password is incorrect. Try again.').show();
+ form.find('.alert').text('{{t "incorrectpwd" }}').show();
}
});
});
diff --git a/views/eventgroup.handlebars b/views/eventgroup.handlebars
index 3151aea..73e84ad 100755
--- a/views/eventgroup.handlebars
+++ b/views/eventgroup.handlebars
@@ -10,7 +10,7 @@
</div>
<div class="col-lg-2 ml-2 edit-buttons">
{{#if editingEnabled}}
- <button type="button" id="editGroup" class="button button--primary text-nowrap ml-auto d-block" data-event-id="{{eventGroupData.id}}" data-toggle="modal" data-target="#editModal"><i class="fas fa-edit"></i> Edit group</button>
+ <button type="button" id="editGroup" class="button button--primary text-nowrap ml-auto d-block" data-event-id="{{eventGroupData.id}}" data-toggle="modal" data-target="#editModal"><i class="fas fa-edit"></i> {{t "group.edit" }}</button>
{{/if}}
</div>
</div>
@@ -20,7 +20,7 @@
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
- Welcome to your event group! We've just sent you an email with your secret editing link, which you can also see in the address bar above. Haven't got the email? Check your spam or junk folder. To share your event group, use the link you can see just below this message - that way your attendees won't be able to edit or delete your event group!
+ {{t "group.welcome" }}
</div>
{{/if}}
<div id="event__basics">
@@ -32,7 +32,7 @@
<span class="fa-li">
<i class="fas fa-fw fa-user-circle"></i>
</span>
- <span class="text-muted">Hosted by</span> {{eventGroupData.hostName}}
+ <span class="text-muted">{{{t "hostedby" }}}
</li>
{{/if}}
{{#if eventGroupData.url}}
@@ -51,7 +51,7 @@
</span>
<a href="https://{{domain}}/group/{{eventGroupData.id}}">https://{{domain}}/group/{{eventGroupData.id}}</a>
<button type="button" id="copyEventLink" class="eventInformationAction button button--outline-secondary button--sm" data-clipboard-text="https://{{domain}}/group/{{eventGroupData.id}}">
- <i class="fas fa-copy"></i> Copy
+ <i class="fas fa-copy"></i> {{t "copy" }}
</button>
</li>
<li>
@@ -63,10 +63,9 @@
<button type="button" id="copyFeedLink"
class="eventInformationAction button button--outline-secondary button--sm"
data-clipboard-text="https://{{domain}}/group/{{eventGroupData.id}}/feed.ics">
- <i class="fas fa-copy"></i> Copy
+ <i class="fas fa-copy"></i> {{t "copy" }}
</button>
- <p class="text-muted small">Paste this URL into your calendar app
- to subscribe to a live feed of events from this group.</p>
+ <p class="text-muted small">{{t "group.feedlinkdesc" }}</p>
</li>
</ul>
</div> <!-- /card -->
@@ -76,31 +75,31 @@
<button type="button" class="button button--outline-secondary button--sm"
data-event-id="{{eventGroupData.id}}" data-toggle="modal"
data-target="#subscribeModal">
- <i class="fas fa-envelope"></i> Subscribe to updates
+ <i class="fas fa-envelope"></i> {{t "group.subscribetitle" }}
</button>
<button type="button" id="exportICS" class="button button--outline-secondary
button--sm" data-event-id="{{eventGroupData.id}}">
- <i class="fas fa-download"></i> Export as ICS
+ <i class="fas fa-download"></i> {{t "ICSexport" }}
</button>
</div>
{{#unless editingEnabled}}
- <button type="button" id="editGroup" class="button button--outline-secondary button--sm" data-event-id="{{eventGroupData.id}}" data-toggle="modal" data-target="#editTokenModal"><i class="fas fa-edit"></i> Switch to editing mode</button>
+ <button type="button" id="editGroup" class="button button--outline-secondary button--sm" data-event-id="{{eventGroupData.id}}" data-toggle="modal" data-target="#editTokenModal"><i class="fas fa-edit"></i> {{t "group.editmode" }}</button>
{{/unless}}
</aside>
</div>
{{#if editingEnabled}}
<div class="alert alert-info mb-4">
- <p>To add an event to this group, copy and paste the two codes below into the 'Event Group' box when creating a new event or editing an existing event.</p>
+ <p>{{t "group.addevent" }}</p>
<div class="table-responsive">
<table style="width:100%">
<tr style="border-bottom:1px solid rgba(0,0,0,0.2)">
- <td><strong>Event group ID</strong></td>
+ <td><strong>{{t "group.p.eventgroupid" }}</strong></td>
<td><span class="code" id="eventGroupID">{{eventGroupData.id}}</span></td>
</tr>
<tr>
- <td><strong>Event group editing password</strong></td>
+ <td><strong>{{t "group.editpswd" }}</strong></td>
<td><span class="code" id="eventGroupEditToken">{{eventGroupData.editToken}}</span></td>
</tr>
</table>
@@ -110,19 +109,19 @@
{{/if}}
<div class="card mb-4" id="eventDescription">
- <h5 class="card-header">About</h5>
+ <h5 class="card-header">{{t "about" }}</h5>
<div class="card-body">
{{{parsedDescription}}}
</div>
</div>
<div class="card mt-4 mb-4" id="upcomingEvents">
- <h5 class="card-header">Upcoming events</h5>
+ <h5 class="card-header">{{t "upcomingevents" }}</h5>
{{> eventList upcomingEvents}}
</div>
<div class="card mt-4 mb-4" id="pastEvents">
- <h5 class="card-header">Past events</h5>
+ <h5 class="card-header">{{t "pastevents" }}</h5>
{{> eventList pastEvents}}
</div>
</div>
@@ -134,19 +133,19 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="deleteModalLabel">Delete '{{eventGroupData.name}}'</h5>
+ <h5 class="modal-title" id="deleteModalLabel">{{t "delete" }} '{{eventGroupData.name}}'</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form id="deleteEventGroupForm" action="/deleteeventgroup/{{eventGroupData.id}}/{{eventGroupData.editToken}}" method="post">
<div class="modal-body">
- <p>Are you sure you want to delete this event group? This action cannot be undone.</p>
- <p>This will <strong>not</strong> delete the individual events contained in this group. They can be linked to another group later.</p>
+ <p>{{t "group.delconfirm" }}</p>
+ <p>{{t "group.deldesc" }}</p>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--danger">Delete event group</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--danger">{{t "group.del" }}</button>
</div>
</form>
</div>
@@ -160,7 +159,7 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="subscribeModalLabel">Subscribe to '{{eventGroupData.name}}'</h5>
+ <h5 class="modal-title" id="subscribeModalLabel">{{t "group.subscribe" }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -168,8 +167,7 @@
<form id="subscribeForm" action="/subscribe/{{eventGroupData.id}}" method="post">
<div class="modal-body">
<div class="form-group">
- <p class="form-text small">Enter your email address to receive updates
- whenever a new event is created in this group.</p>
+ <p class="form-text small">{{t "group.subscribedesc" }}</p>
</div>
<div class="form-group">
<input type="email" class="form-control" id="emailAddress"
@@ -177,8 +175,8 @@
</div>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--primary">Subscribe</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--primary">{{t "group.subscribebutton" }}</button>
</div>
</form>
</div>
@@ -189,7 +187,7 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="editTokenModalLabel">Enter editing password</h5>
+ <h5 class="modal-title" id="editTokenModalLabel">{{t "edittoken" }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -197,9 +195,9 @@
<form id="verifyTokenForm" action="/verifytoken/group/{{eventGroupData.id}}" method="post">
<div class="modal-body">
<div class="form-group">
- <p class="form-text small">Enter the editing password you received by email or were shown when the event was created.</p>
+ <p class="form-text small">{{t "edittokendesc" }}</p>
<div class="form-group">
- <input type="text" class="form-control" id="editToken" name="editToken" placeholder="Get it right!" data-validation="required">
+ <input type="text" class="form-control" id="editToken" name="editToken" placeholder="{{t "right" }}" data-validation="required">
</div>
<div class="form-group">
<div class="alert alert-danger" style="display:none;"></div>
@@ -207,8 +205,8 @@
</div>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
- <button type="submit" class="button button--primary">Edit group</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
+ <button type="submit" class="button button--primary">{{t "group.edit" }}</button>
</div>
</form>
</div>
@@ -275,12 +273,12 @@ window.groupData = {{{ json jsonData }}};
})
})
$("#copyEventLink").click(function(){
- $(this).html('<i class="fas fa-copy"></i> Copied!');
- setTimeout(function(){ $("#copyEventLink").html('<i class="fas fa-copy"></i> Copy');}, 5000);
+ $(this).html('<i class="fas fa-copy"></i> {{t "copied" }}!');
+ setTimeout(function(){ $("#copyEventLink").html('<i class="fas fa-copy"></i> {{t "copy" }}');}, 5000);
});
$("#copyFeedLink").click(function(){
- $(this).html('<i class="fas fa-copy"></i> Copied!');
- setTimeout(function(){ $("#copyFeedLink").html('<i class="fas fa-copy"></i> Copy');}, 5000);
+ $(this).html('<i class="fas fa-copy"></i> {{t "copied" }}');
+ setTimeout(function(){ $("#copyFeedLink").html('<i class="fas fa-copy"></i> {{t "copy" }}');}, 5000);
});
$('#verifyTokenForm').on('submit', function(e) {
@@ -298,7 +296,7 @@ window.groupData = {{{ json jsonData }}};
}
},
error: function(response, status, xhr) {
- form.find('.alert').text('That editing password is incorrect. Try again.').show();
+ form.find('.alert').text('{{t "incorrectpwd" }}').show();
}
});
});
diff --git a/views/home.handlebars b/views/home.handlebars
index 700d875..eb40646 100755
--- a/views/home.handlebars
+++ b/views/home.handlebars
@@ -1,5 +1,5 @@
<main class="page">
- <h2 class="mb-3 pb-2 text-center border-bottom">About {{siteName}}</h2>
+ <h2 class="mb-3 pb-2 text-center border-bottom">{{{t "home.about" }}} {{siteName}}</h2>
{{#if instanceDescription}}
<div class="instance-description mb-4">
@@ -9,63 +9,49 @@
{{> instanceRules }}
- <h2 class="mb-3 mt-5 pb-2 text-center border-bottom">About Gathio</h2>
+ <h2 class="mb-3 mt-5 pb-2 text-center border-bottom">{{t "home.aboutgathio"}}</h2>
- <p class="lead text-center">Gathio is a simple, federated, privacy-first event hosting platform.</p>
+ <p class="lead text-center">{{t "home.intro"}}</p>
<div id="example-event" class="text-center w-100 mt-4 mb-5">
<img
- alt="An example event page for a picnic. The page shows the event's location, host, date and time, and description, as well as buttons to save the event to Google Calendar, export it, and open the location in OpenStreetMap and Google Maps."
+ alt="{{t "home.imgexample" }}"
src="images/example-event-2023.png" class="img-fluid w-75 mx-auto shadow-lg rounded">
</div>
- <h3>Privacy-first</h3>
+ <h3>{{t "home.privacytitle" }}</h3>
- <p>There are no accounts on Gathio. When you create an event, we generate a password which allows you to edit the
- event. Send all your guests the public link, and all your co-hosts the secret editing link containing the password.
- </p>
+ <p>{{t "home.privdesc" }} </p>
- <p>If you supply your email, we'll send you the editing password so you don't lose it - but supplying your email is
- optional!</p>
+ <p>{{t "home.privmail" }}</p>
- <p>If this instance automatically deletes its events, sometime after the event finishes, it's deleted from the
- database for ever, and your data goes with it.</p>
+ <p>{{t "home.autodelete" }}</p>
- <p>Also, Gathio doesn't show you ads, doesn't sell your data, and never sends you unnecessary emails.</p>
+ <p>{{t "home.privacy" }} </p>
- <p>But remember: all events are visible to anyone who knows the link, so probably don't use Gathio to plot your
- surprise birthday party or revolution. Or whatever, you do you.</p>
+ <p>{{t "home.attention" }} </p>
- <h3>Configurable</h3>
+ <h3>{{t "home.conftitle" }}</h3>
- <p>The <a href="https://gath.io">flagship Gathio instance at gath.io</a> is designed for anyone to create ephemeral,
- hidden events. Anyone can create an event; events are never displayed anywhere public; and they're deleted 7 days
- after they end.</p>
+ <p>{{{t "home.flagshipsetting" }}}</p>
- <p>But if your community sets up their own instance, you can limit event creation to a specific list of people,
- display events on a handy list on the homepage, and disable event deletion entirely!</p>
+ <p>{{t "home.onpre" }}</p>
- <h3>Federation and self-hosting</h3>
+ <h3>{{t "home.fedtitle" }}</h3>
- <p>Gathio can easily be self-hosted, and supports ActivityPub services like Mastodon, Pleroma, and Friendica, allowing
- you to access events from anywhere on the Fediverse. We encourage you to spin up your own instance for your
- community. Detailed instructions on <a href="https://docs.gath.io/using-gathio/fediverse/">ActivityPub access</a>
- and <a href="https://docs.gath.io/running-gathio/installation/">self-hosted installation</a>
- live on our GitHub wiki.
+ <p>{{{t "home.selfhost" }}}</p>
- <h3>Open source</h3>
+ <h3>{{t "home.opensource" }}</h3>
- <p>Gathio is delighted to be open source, and is built by a lovely group of people. Leave a question in our <a
- href="https://github.com/lowercasename/gathio/issues">tracker</a> if you encounter any issues.</p>
+ <p>{{{t "home.osdesc" }}}</p>
{{#if showKofi}}
<div class="card border-secondary mt-5 mb-3 mx-auto" style="min-width:300px;max-width:50%;">
<div class="card-body text-secondary">
- <p>If you find yourself using and enjoying Gathio, consider buying Raphael a coffee. It'll help keep the project
- and main site running! <i class="far fa-heart"></i></p>
+ <p>{{{t "home.kofidesc" }}}</p>
<script type='text/javascript' src='https://ko-fi.com/widgets/widget_2.js'></script>
<script
- type='text/javascript'>kofiwidget2.init('Support Me on Ko-fi', '#46b798', 'Q5Q2O7T5'); kofiwidget2.draw();</script>
+ type='text/javascript'>kofiwidget2.init('{{t "home.kofi" }}', '#46b798', 'Q5Q2O7T5'); kofiwidget2.draw();</script>
</div>
</div>
{{/if}}
diff --git a/views/layouts/main.handlebars b/views/layouts/main.handlebars
index e967019..c702a6d 100755
--- a/views/layouts/main.handlebars
+++ b/views/layouts/main.handlebars
@@ -77,7 +77,7 @@
</p>
{{/if}}
<p class="small text-muted">
- <strong>Gathio</strong> version {{version}} &middot; <a href="https://github.com/lowercasename/gathio">GitHub</a> &middot; Made with <i class="far fa-heart"></i> by <a href="https://raphaelkabo.com">Raphael</a> and <a href="https://github.com/lowercasename/gathio/graphs/contributors">contributors</a>
+ {{{t "main.footnote" }}}
</p>
</footer>
</section>
diff --git a/views/newevent.handlebars b/views/newevent.handlebars
index d6d7024..1862ebe 100755
--- a/views/newevent.handlebars
+++ b/views/newevent.handlebars
@@ -1,25 +1,25 @@
<main class="page" x-data="{currentTab: null}">
-<h2 class="mb-3 pb-2 text-center border-bottom">What would you like to do?</h2>
+<h2 class="mb-3 pb-2 text-center border-bottom">{{t "newevent.pagetitle" }}</h2>
<div class="container-fluid mb-4">
<div class="row">
<div class="col-lg-4 p-2">
- <button type="button" id="showNewEventFormButton" class="button w-100" x-bind:class="currentTab === 'event' ? 'button--primary' : 'button--secondary'" x-on:click="currentTab = 'event'"><i class="fas fa-calendar-day"></i> Create a new event</button>
+ <button type="button" id="showNewEventFormButton" class="button w-100" x-bind:class="currentTab === 'event' ? 'button--primary' : 'button--secondary'" x-on:click="currentTab = 'event'"><i class="fas fa-calendar-day"></i> {{t "newevent.neweventbutton" }}</button>
</div>
<div class="col-lg-4 p-2">
- <button type="button" id="showImportEventFormButton" class="button w-100" x-bind:class="currentTab === 'importEvent' ? 'button--primary' : 'button--secondary'" x-on:click="currentTab = 'importEvent'"><i class="fas fa-file-import"></i> Import an existing event</button>
+ <button type="button" id="showImportEventFormButton" class="button w-100" x-bind:class="currentTab === 'importEvent' ? 'button--primary' : 'button--secondary'" x-on:click="currentTab = 'importEvent'"><i class="fas fa-file-import"></i> {{t newevent.importevent }}</button>
</div>
<div class="col-lg-4 p-2">
- <button type="button" id="showNewEventGroupFormButton" class="button w-100" x-bind:class="currentTab === 'group' ? 'button--primary' : 'button--secondary'" x-on:click="currentTab = 'group'"><i class="fas fa-calendar-alt"></i> Create a new event group </button>
+ <button type="button" id="showNewEventGroupFormButton" class="button w-100" x-bind:class="currentTab === 'group' ? 'button--primary' : 'button--secondary'" x-on:click="currentTab = 'group'"><i class="fas fa-calendar-alt"></i> {{t newevent.neweventgroup }} </button>
</div>
</div>
</div>
<div class="alert alert-info mb-4 text-center" role="alert">
- <i class="fas fa-exclamation-circle"></i> Events are visible to anyone who knows the link.
+ <i class="fas fa-exclamation-circle"></i> {{{t "newevent.visiblealert" }}}
</div>
<div id="newEventFormContainer" x-show="currentTab === 'event'" style="display: none">
- <h4 class="mb-2">Create an event</h4>
+ <h4 class="mb-2">{{t "newevent" }}</h4>
<form
id="newEventForm"
enctype="multipart/form-data"
@@ -38,7 +38,7 @@
class="button button--primary w-50"
x-bind:disabled="submitting"
x-bind:class="submitting ? 'button--loading' : ''"
- x-text="submitting ? 'Creating...' : 'Create'"
+ x-text="submitting ? '{{t "creating" }}' : '{{t "create" }}'"
></button>
</div>
</div>
@@ -50,9 +50,9 @@
</div>
<div id="newEventGroupFormContainer" x-show="currentTab === 'group'" style="display: none">
- <h4 class="mb-2">Create an event group</h4>
- <p class="text-muted">An event group is a holding area for a set of linked events, like a recurring game night, a festival, or a band tour. You can share a public link to your event group just like an individual event link, and people who know the secret editing code will be able to add future events to the group.</p>
- <p class="text-muted">Event groups do not get automatically removed like events do, but events which have been removed from {{siteName}} will of course not show up in an event group.</p>
+ <h4 class="mb-2">{{t "newevent.newgroup" }}</h4>
+ <p class="text-muted">{{t "newevent.groupdesc" }}</p>
+ <p class="text-muted">{{{t "newevent.groupattention" }}}</p>
<form id="newEventGroupForm" enctype="multipart/form-data" x-data="newEventGroupForm()" @submit.prevent="submitForm">
{{> eventGroupForm }}
<div class="form-group row">
@@ -62,7 +62,7 @@
class="button button--primary w-50"
x-bind:disabled="submitting"
x-bind:class="submitting ? 'button--loading' : ''"
- x-text="submitting ? 'Creating...' : 'Create'"
+ x-text="submitting ? '{{t "creating" }}' : '{{t "create" }}'"
></button>
</div>
</div>
diff --git a/views/optionsform.handlebars b/views/optionsform.handlebars
index 85ebd9f..06dbe95 100755
--- a/views/optionsform.handlebars
+++ b/views/optionsform.handlebars
@@ -1,46 +1,46 @@
<div class="form-group row">
- <div class="col-sm-2">Options</div>
+ <div class="col-sm-2">{{t "options.title" }}</div>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="joinCheckbox" name="joinCheckbox" {{#if data.joinCheckbox}}checked{{/if}}>
<label class="form-check-label" for="joinCheckbox">
- Users can mark themselves as attending this event
+ {{t "join" }}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="guestlistCheckbox" name="guestlistCheckbox" {{#if data.guestlistCheckbox}}checked{{/if}}>
<label class="form-check-label" for="guestlistCheckbox">
- Display the list of attendees
+ {{t "options.showlistattendees" }}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="interactionCheckbox" name="interactionCheckbox" {{#if data.interactionCheckbox}}checked{{/if}}>
<label class="form-check-label" for="interactionCheckbox">
- Users can post comments on this event
+ {{t "interaction" }}
</label>
</div>
</div>
</div>
<div class="form-group row">
- <div class="col-sm-2">Options</div>
+ <div class="col-sm-2">{{t "options.title" }}</div>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="joinCheckbox" name="joinCheckbox" {{#if eventData.usersCanAttend}}checked{{/if}}>
<label class="form-check-label" for="joinCheckbox">
- Users can mark themselves as attending this event
+ {{t "join" }}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="guestlistCheckbox" name="guestlistCheckbox" {{#if eventData.showUsersList}}checked{{/if}}>
<label class="form-check-label" for="guestlistCheckbox">
- Display the list of attendees
+ {{t "options.showlistattendees" }}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="interactionCheckbox" name="interactionCheckbox" {{#if eventData.usersCanComment}}checked{{/if}}>
<label class="form-check-label" for="interactionCheckbox">
- Users can post comments on this event
+ {{t "interaction" }}
</label>
</div>
</div>
diff --git a/views/partials/editeventgroupmodal.handlebars b/views/partials/editeventgroupmodal.handlebars
index 046d15e..fb3033d 100644
--- a/views/partials/editeventgroupmodal.handlebars
+++ b/views/partials/editeventgroupmodal.handlebars
@@ -2,7 +2,7 @@
<div class="modal-dialog modal-xl modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="editModalLabel">Edit '{{eventGroupData.name}}'</h5>
+ <h5 class="modal-title" id="editModalLabel">{{{t "group.edit" }}} </h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -14,23 +14,23 @@
<div class="form-group">
<div class="card border-danger mb-3">
- <div class="card-header text-danger">Delete this event group</div>
+ <div class="card-header text-danger">{{t "group.p.del" }}</div>
<div class="card-body text-danger">
- <button type="button" id="deleteEvent" class="button button--danger" data-toggle="modal" data-target="#deleteModal"><i class="fas fa-trash"></i> Delete event group</button>
+ <button type="button" id="deleteEvent" class="button button--danger" data-toggle="modal" data-target="#deleteModal"><i class="fas fa-trash"></i> {{t "group.p.delbutton" }}</button>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
<button
type="submit"
class="button button--primary"
@click="submitForm"
x-bind:disabled="submitting"
x-bind:class="submitting ? 'button--loading' : ''"
- x-text="submitting ? 'Saving...' : 'Save'"
+ x-text="submitting ? '{{t "saving" }}' : '{{t "save" }}'"
></button>
</div>
</div>
diff --git a/views/partials/editeventmodal.handlebars b/views/partials/editeventmodal.handlebars
index 986da9c..6deac7f 100644
--- a/views/partials/editeventmodal.handlebars
+++ b/views/partials/editeventmodal.handlebars
@@ -7,7 +7,7 @@
<div class="modal-dialog modal-xl modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
- <h5 class="modal-title" id="editModalLabel">Edit '{{eventData.name}}'</h5>
+ <h5 class="modal-title" id="editModalLabel">{{{t "event.p.edit" }}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
@@ -19,25 +19,25 @@
<div class="form-group">
<div class="card border-danger mb-3">
- <div class="card-header text-danger">Delete this event</div>
+ <div class="card-header text-danger">{{t "event.p.delthis" }}</div>
<div class="card-body text-danger">
<button type="button" id="deleteEvent" class="button button--danger" data-toggle="modal"
data-target="#deleteModal" data-event-id="{{eventData.id}}"><i class="fas fa-trash"></i>
- Delete</button>
+ {{t "del" }}</button>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
- <button type="button" class="button button--secondary" data-dismiss="modal">Close</button>
+ <button type="button" class="button button--secondary" data-dismiss="modal">{{t "close" }}</button>
<button
type="submit"
class="button button--primary"
@click="submitForm"
x-bind:disabled="submitting"
x-bind:class="submitting ? 'button--loading' : ''"
- x-text="submitting ? 'Saving...' : 'Save'"
+ x-text="submitting ? '{{t "saving" }}' : '{{t "save" }}'"
></button>
</div>
</div>
diff --git a/views/partials/eventForm.handlebars b/views/partials/eventForm.handlebars
index 93e8e84..91e5a7c 100755
--- a/views/partials/eventForm.handlebars
+++ b/views/partials/eventForm.handlebars
@@ -1,100 +1,100 @@
<input type="hidden" name="magicLinkToken" value="{{magicLinkToken}}" x-ref="magicLinkToken">
<div class="form-group">
- <label for="eventName" >Event name</label>
+ <label for="eventName" >{{t "event.p.eventname" }}</label>
<div class="form-group ">
- <input type="text" class="form-control" id="eventName" name="eventName" placeholder="Make it snappy." x-model="data.eventName" >
+ <input type="text" class="form-control" id="eventName" name="eventName" placeholder="{{t "snappy" }}" x-model="data.eventName" >
</div>
</div>
<div class="form-group">
- <label for="eventLocation" >Location</label>
+ <label for="eventLocation" >{{t "event.p.eventlocation" }}</label>
<div class="form-group ">
- <input type="text" class="form-control" id="eventLocation" name="eventLocation" placeholder="Be specific." x-model="data.eventLocation">
+ <input type="text" class="form-control" id="eventLocation" name="eventLocation" placeholder="{{t "event.locationdesc" }}" x-model="data.eventLocation">
</div>
</div>
<div class="form-group">
- <label for="eventStart" >Starts</label>
+ <label for="eventStart" >{{t "event.p.eventstart" }}</label>
<div class="form-group">
<input type="datetime-local" class="form-control" id="eventStart" name="eventStart" x-model="data.eventStart" x-on:blur="updateEventEnd">
</div>
</div>
<div class="form-group">
- <label for="eventEnd" >Ends</label>
+ <label for="eventEnd" >{{t "event.p.eventend" }}</label>
<div class="form-group ">
<input type="datetime-local" class="form-control" id="eventEnd" name="eventEnd" x-model="data.eventEnd">
</div>
</div>
<div class="form-group">
- <label for="timezone" >Timezone</label>
+ <label for="timezone" >{{t "event.p.timezone" }}</label>
<div class="form-group ">
<select class="select2" id="timezone" name="timezone" x-ref="timezone"></select>
</div>
</div>
<div class="form-group">
- <label for="eventDescription" >Description</label>
+ <label for="eventDescription" >{{t "event.p.description" }}</label>
<div class="form-group ">
- <textarea class="form-control expand" id="eventDescription" name="eventDescription" placeholder="You can always edit it later." x-model="data.eventDescription" ></textarea>
- <small class="form-text"><a href="https://commonmark.org/help/">Markdown</a> formatting supported.</small>
+ <textarea class="form-control expand" id="eventDescription" name="eventDescription" placeholder="{{t "event.editlater" }}" x-model="data.eventDescription" ></textarea>
+ <small class="form-text">{{{t "mdsupport" }}}</small>
</div>
</div>
<div class="form-group">
- <label for="eventURL">Link</label>
+ <label for="eventURL">{{t "event.p.eventurl" }}</label>
<div class="form-group ">
<input type="url" class="form-control" id="eventURL" name="eventURL" placeholder="https://example.com" x-model="data.eventURL">
- <small class="form-text">For tickets or another event page (optional).</small>
+ <small class="form-text">{{t "event.p.eventurldesc" }}</small>
</div>
</div>
<div class="form-group">
- <label for="eventImage" >Cover image</label>
+ <label for="eventImage" >{{t "coverimg" }}</label>
<div class="form-group ">
<div class="image-preview" id="event-image-preview">
- <label for="image-upload" id="event-image-label">Choose file</label>
+ <label for="image-upload" id="event-image-label">{{t "choosefile" }}</label>
<input type="file" name="imageUpload" id="event-image-upload" accept="image/jpeg,image/gif,image/png" x-ref="eventImageUpload" />
</div>
- <small class="form-text">Recommended dimensions (w x h): 920px by 300px.</small>
+ <small class="form-text">{{t "recommendeddimensions" }}</small>
{{#if eventData.image}}
<div class="form-group my-2">
- <button type="button" class="button button--danger" id="deleteImage">Delete image</button>
+ <button type="button" class="button button--danger" id="deleteImage">{{t "imgdel" }}</button>
</div>
{{/if}}
</div>
</div>
<div class="form-group">
- <label for="hostName" >Host name</label>
+ <label for="hostName" >{{t "event.p.hostname" }}</label>
<div class="form-group ">
- <input type="text" class="form-control" id="hostName" name="hostName" placeholder="Will be shown on the event page (optional)." x-model="data.hostName" >
+ <input type="text" class="form-control" id="hostName" name="hostName" placeholder="{{t "event.p.hostnamedesc" }}" x-model="data.hostName" >
</div>
</div>
<div class="form-group">
- <label for="creatorEmail" >Your email</label>
+ <label for="creatorEmail" >{{t "event.p.creatoremail" }}</label>
<div class="form-group ">
- <input type="email" class="form-control" id="creatorEmail" name="creatorEmail" placeholder="Will not be shown anywhere (optional)." x-model.fill="data.creatorEmail" {{#if creatorEmail}}value="{{creatorEmail}}" readonly{{/if}}>
- <small class="form-text">If you provide your email, we will send your secret editing password here, and use it to notify you of updates to the event.</small>
+ <input type="email" class="form-control" id="creatorEmail" name="creatorEmail" placeholder="{{t "wontshow" }}" x-model.fill="data.creatorEmail" {{#if creatorEmail}}value="{{creatorEmail}}" readonly{{/if}}>
+ <small class="form-text">{{t "creatoremaildesc" }}</small>
</div>
</div>
<div class="form-group">
- <label>Options</label>
+ <label>{{t "event.options" }}</label>
<div >
{{#if showPublicEventList}}
<div class="form-check">
<input class="form-check-input" type="checkbox" id="publicEventCheckbox" name="publicCheckbox" x-model="data.publicCheckbox">
<label class="form-check-label" for="publicEventCheckbox">
- Display this event on the public event list
+ {{t "event.p.publicevent" }}
</label>
</div>
{{/if}}
<div class="form-check">
<input class="form-check-input" type="checkbox" id="eventGroupCheckbox" name="eventGroupCheckbox" x-model="data.eventGroupCheckbox">
<label class="form-check-label" for="eventGroupCheckbox">
- This event is part of an event group
+ {{t "event.p.eventgroup" }}
</label>
</div>
<div class="card my-2" id="eventGroupData" x-show="data.eventGroupCheckbox">
<div class="card-header">
- <strong>Link this event to an event group</strong>
+ <strong>{{t "event.p.eventgroupdata" }}</strong>
</div>
<div class="card-body" x-data="eventGroupLinker()">
<div class="form-group-label" x-show="data.groups.length > 0">
- <label>Choose a group you've edited before</label>
+ <label>{{t "event.p.eventgrouplinker" }}</label>
</div>
<div class="form-group" x-show="data.groups.length > 0">
<select
@@ -111,7 +111,7 @@
</select>
</div>
<button type="button" class="button button--outline-primary w-100 text-center" x-on:click="manualGroupInputVisible = !manualGroupInputVisible">
- Enter group details manually <i class="fas" :class="{'fa-caret-down': !manualGroupInputVisible, 'fa-caret-up': manualGroupInputVisible}"></i>
+ {{t "event.p.groupbutton" }} <i class="fas" :class="{'fa-caret-down': !manualGroupInputVisible, 'fa-caret-up': manualGroupInputVisible}"></i>
</button>
<div
class="form-group slider"
@@ -120,15 +120,15 @@
:style="manualGroupInputVisible && {height: $el.scrollHeight+`px`}"
:aria-hidden="!manualGroupInputVisible"
>
- <label for="eventGroupID" class="mt-2">Event group ID</label>
+ <label for="eventGroupID" class="mt-2">{{t "group.p.eventgroupid" }}</label>
<div class="form-group">
<input type="text" class="form-control text-monospace" id="eventGroupID" name="eventGroupID" x-model="data.eventGroupID" x-on:input="resetGroupSelector">
- <small class="form-text">You can find this short string of characters in the event group's link, in your confirmation email, or on the event group's page.</small>
+ <small class="form-text">{{t "event.p.eventgroupid" }}</small>
</div>
- <label for="eventGroupEditToken">Event group secret editing code</label>
+ <label for="eventGroupEditToken">{{t "group.p.eventgroupedittoken" }}</label>
<div class="form-group mb-0">
<input type="text" class="form-control text-monospace" id="eventGroupEditToken" name="eventGroupEditToken" x-model="data.eventGroupEditToken" x-on:input="resetGroupSelector">
- <small class="form-text">You can find this long string of characters in the confirmation email you received when you created the event group.</small>
+ <small class="form-text">{{t "event.p.eventgroupedittoken" }}</small>
</div>
</div>
</div>
@@ -136,27 +136,27 @@
<div class="form-check">
<input class="form-check-input" type="checkbox" id="interactionCheckbox" name="interactionCheckbox" x-model="data.interactionCheckbox">
<label class="form-check-label" for="interactionCheckbox">
- Users can post comments on this event
+ {{t "interaction" }}
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="joinCheckbox" name="joinCheckbox" x-model="data.joinCheckbox">
<label class="form-check-label" for="joinCheckbox">
- Users can mark themselves as attending this event
+ {{t "join" }}
</label>
</div>
<div class="form-check" id="maxAttendeesCheckboxContainer" x-show="data.joinCheckbox">
<input class="form-check-input" type="checkbox" id="maxAttendeesCheckbox" name="maxAttendeesCheckbox" x-model="data.maxAttendeesCheckbox">
<label class="form-check-label" for="maxAttendeesCheckbox">
- Set a limit on the maximum number of attendees
+ {{t "event.p.maxattendeestitle" }}
</label>
</div>
</div>
</div>
<div class="form-group" id="maxAttendeesContainer" x-show="data.maxAttendeesCheckbox && data.joinCheckbox">
- <label for="maxAttendees" >Attendee limit</label>
+ <label for="maxAttendees" >{{t "event.p.maxattendees" }}</label>
<div class="form-group ">
- <input type="number" class="form-control" id="maxAttendees" name="maxAttendees" placeholder="Enter a number." x-model="data.maxAttendees" >
+ <input type="number" class="form-control" id="maxAttendees" name="maxAttendees" placeholder="{{t "event.enternum" }}" x-model="data.maxAttendees" >
</div>
</div>
<div class="form-group">
@@ -166,7 +166,7 @@
role="alert"
x-show="errors.length > 0"
>
- <p><i class="fas fa-exclamation-triangle"></i> Please fix these errors:</p>
+ <p><i class="fas fa-exclamation-triangle"></i> {{t "fixerrors" }}</p>
<ul>
<template x-for="error in errors">
<li x-html="error.message"></li>
diff --git a/views/partials/eventGroupForm.handlebars b/views/partials/eventGroupForm.handlebars
index 5536e49..d5d7baa 100644
--- a/views/partials/eventGroupForm.handlebars
+++ b/views/partials/eventGroupForm.handlebars
@@ -1,36 +1,36 @@
<input type="hidden" name="magicLinkToken" value="{{magicLinkToken}}" x-ref="magicLinkToken">
<div class="form-group">
- <label for="eventGroupName">Name</label>
- <input type="text" class="form-control" id="eventGroupName" name="eventGroupName" placeholder="Make it snappy." x-model="data.eventGroupName">
+ <label for="eventGroupName">{{t "group.p.eventgroupname" }}</label>
+ <input type="text" class="form-control" id="eventGroupName" name="eventGroupName" placeholder="{{t "snappy" }}" x-model="data.eventGroupName">
</div>
<div class="form-group">
- <label for="eventGroupDescription">Description</label>
+ <label for="eventGroupDescription">{{t "group.p.eventgroupdescription" }}</label>
<textarea class="form-control" id="eventGroupDescription" name="eventGroupDescription" x-model="data.eventGroupDescription">{{eventGroupData.description}}</textarea>
- <small class="form-text"><a href="https://commonmark.org/help/">Markdown</a> formatting supported.</small>
+ <small class="form-text">{{{t "mdsupport" }}}</small>
</div>
<div class="form-group">
- <label for="eventGroupURL">Link</label>
+ <label for="eventGroupURL">{{t "group.p.eventgroupurl" }}</label>
<input type="url" class="form-control" id="eventGroupURL" name="eventGroupURL" placeholder="https://example.com" x-model="data.eventGroupURL">
- <small class="form-text">For tickets or a page with more information (optional).</small>
+ <small class="form-text">{{t "group.p.eventgroupurldesc" }}</small>
</div>
<div class="form-group">
- <label for="hostName">Host or organisation name</label>
- <input type="text" class="form-control" id="eventGroupHostName" name="hostName" placeholder="Will be shown on the event group page (optional)." x-model="data.hostName">
+ <label for="hostName">{{t"group.p.hostname" }}</label>
+ <input type="text" class="form-control" id="eventGroupHostName" name="hostName" placeholder="{{t "group.p.isshowgroup" }}" x-model="data.hostName">
</div>
<div class="form-group">
- <label for="creatorEmail">Your email</label>
+ <label for="creatorEmail">{{t "group.p.creatoremail" }}</label>
<div class="form-group">
- <input type="email" class="form-control" id="eventGroupCreatorEmail" name="creatorEmail" placeholder="Will not be shown anywhere (optional)." x-model.fill="data.creatorEmail" {{#if creatorEmail}}value="{{creatorEmail}}" readonly{{/if}}>
- <small class="form-text">If you provide your email, we will send your secret editing password here, and use it to notify you of updates to the event.</small>
+ <input type="email" class="form-control" id="eventGroupCreatorEmail" name="creatorEmail" placeholder="{{t "wontshow" }}" x-model.fill="data.creatorEmail" {{#if creatorEmail}}value="{{creatorEmail}}" readonly{{/if}}>
+ <small class="form-text">{{t "creatoremaildesc" }}</small>
</div>
</div>
<div class="form-group">
- <label>Cover image</label>
+ <label>{{t "coverimg" }}</label>
<div class="image-preview" id="group-image-preview">
- <label for="eventGroupImageUpload" id="group-image-label">Choose file</label>
+ <label for="eventGroupImageUpload" id="group-image-label">{{t "choosefile" }}</label>
<input type="file" name="imageUpload" id="group-image-upload" accept="image/jpeg,image/gif,image/png" x-ref="eventGroupImageUpload"/>
</div>
- <small class="form-text">Recommended dimensions (w x h): 920px by 300px.</small>
+ <small class="form-text">{{t "recommendeddimensions" }}</small>
</div>
{{#if showPublicEventList}}
<div class="form-group">
@@ -38,7 +38,7 @@
<div class="form-check">
<input class="form-check-input" type="checkbox" id="publicGroupCheckbox" name="publicCheckbox" x-model="data.publicCheckbox">
<label class="form-check-label" for="publicGroupCheckbox">
- Display this group on the public group list
+ {{t "group.p.publicgroup" }}
</label>
</div>
</div>
@@ -50,7 +50,7 @@
role="alert"
x-show="errors.length > 0"
>
- <p><i class="fas fa-exclamation-triangle"></i> Please fix these errors:</p>
+ <p><i class="fas fa-exclamation-triangle"></i> {{t "fixerrors" }}</p>
<ul>
<template x-for="error in errors">
<li x-html="error.message"></li>
diff --git a/views/partials/eventList.handlebars b/views/partials/eventList.handlebars
index 6c8e7a4..c36c428 100644
--- a/views/partials/eventList.handlebars
+++ b/views/partials/eventList.handlebars
@@ -17,6 +17,6 @@
{{/each}}
{{/each}}
{{else}}
- <div class="list-group-item">No events!</div>
+ <div class="list-group-item">{{t "noevents" }}</div>
{{/if}}
</div>
diff --git a/views/partials/importeventform.handlebars b/views/partials/importeventform.handlebars
index a8c0f0e..e45f16f 100644
--- a/views/partials/importeventform.handlebars
+++ b/views/partials/importeventform.handlebars
@@ -1,6 +1,6 @@
-<h4 class="mb-2">Import an existing event</h4>
+<h4 class="mb-2">{{t newevent.importevent }}</h4>
<p>
- Upload an .ics file here to instantly create an event. You can save a Facebook event as an .ics file by clicking on the context menu next to the 'Import' and 'Edit' buttons on the event page and choosing the 'Export Event' option. Then select the 'Save to calendar' option and save the file on your computer.
+ {{t "newevent.p.importdesc" }}
</p>
<img class="img-thumbnail mb-3 d-block mx-auto" src="/images/facebook-export.png" alt="Image showing the location of the export option on Facebook" />
@@ -11,15 +11,15 @@
<div class="custom-file" id="icsImportContainer">
<input required name="icsImportControl" type="file" class="custom-file-input" id="icsImportControl" aria-describedby="fileHelp" accept="text/calendar" x-ref="icsImportControl"/>
<label name="icsImportLabel" class="custom-file-label" id="icsImportLabel" for="icsImportControl">
- <i class="far fa-file-alt"></i> Select file
+ <i class="far fa-file-alt"></i> {{t "selectfile" }}
</label>
</div>
</div>
<div class="form-group">
- <label for="creatorEmail" class="form-label">Your email</label>
+ <label for="creatorEmail" class="form-label">{{t "youremail" }}</label>
<div class="form-group">
- <input type="email" class="form-control" id="importCreatorEmail" name="creatorEmail" placeholder="Will not be shown anywhere (optional)." x-model.fill="data.creatorEmail" {{#if creatorEmail}}value="{{creatorEmail}}" readonly{{/if}}>
- <small class="form-text">If you provide your email, we will send your secret editing password here, and use it to notify you of updates to the event.</small>
+ <input type="email" class="form-control" id="importCreatorEmail" name="creatorEmail" placeholder="{{t "wontshow" }}" x-model.fill="data.creatorEmail" {{#if creatorEmail}}value="{{creatorEmail}}" readonly{{/if}}>
+ <small class="form-text">{{t "creatoremaildesc" }}</small>
</div>
</div>
<div class="form-group">
@@ -43,6 +43,6 @@
class="d-block mx-auto button button--primary w-50"
x-bind:disabled="submitting"
x-bind:class="submitting ? 'button--loading' : ''"
- x-text="submitting ? 'Importing...' : 'Import'"
+ x-text="submitting ? '{{t "newevent.p.importing" }}' : '{{t "newevent.p.import" }}'"
></button>
</form>
diff --git a/views/partials/instanceRules.handlebars b/views/partials/instanceRules.handlebars
index c7fa9be..c0a6c6c 100644
--- a/views/partials/instanceRules.handlebars
+++ b/views/partials/instanceRules.handlebars
@@ -1,6 +1,6 @@
<div class="card mb-4">
<div class="card-header">
- <h6 class="mb-1">Instance settings</h6>
+ <h6 class="mb-1">{{t "instancesettings" }}</h6>
</div>
<ul class="list-group list-group-flush">
diff --git a/views/partials/sidebar.handlebars b/views/partials/sidebar.handlebars
index c1184be..942f1ff 100755
--- a/views/partials/sidebar.handlebars
+++ b/views/partials/sidebar.handlebars
@@ -2,10 +2,10 @@
<h1><a href="/">gathio</a></h1>
<ul id="sidebar__nav">
- <li><a class="button button--primary" href="/new"><i class="far fa-calendar-plus"></i> Create an event</a></li>
+ <li><a class="button button--primary" href="/new"><i class="far fa-calendar-plus"></i> {{t "sidebar.createevent" }}</a></li>
{{#if showPublicEventList}}
- <li><a href="/events">View events</a></li>
- <li><a href="/about">About</a></li>
+ <li><a href="/events">{{t "sidebar.events" }}</a></li>
+ <li><a href="/about">{{t "about" }}</a></li>
{{/if}}
</ul>
</div>
diff --git a/views/publicEventList.handlebars b/views/publicEventList.handlebars
index b8cacd0..5c81496 100644
--- a/views/publicEventList.handlebars
+++ b/views/publicEventList.handlebars
@@ -12,39 +12,39 @@
<ul class="nav d-flex flex-gap--small">
<li>
- <a id="eventsTab" class="button button--lg" x-bind:class="currentTab === 'events' ? 'button--primary' : 'button--secondary'" aria-current="page" href="#" x-on:click.prevent="currentTab = 'events'">Events</a>
+ <a id="eventsTab" class="button button--lg" x-bind:class="currentTab === 'events' ? 'button--primary' : 'button--secondary'" aria-current="page" href="#" x-on:click.prevent="currentTab = 'events'">{{t "publiclist.events" }}</a>
</li>
<li>
- <a id="groupsTab" class="button button--lg" x-bind:class="currentTab === 'groups' ? 'button--primary' : 'button--secondary'" href="#" x-on:click.prevent="currentTab = 'groups'">Groups</a>
+ <a id="groupsTab" class="button button--lg" x-bind:class="currentTab === 'groups' ? 'button--primary' : 'button--secondary'" href="#" x-on:click.prevent="currentTab = 'groups'">{{t "publiclist.groups" }}</a>
</li>
</ul>
<div x-show="currentTab === 'events'">
<div class="card mt-4 mb-4" id="upcomingEvents">
- <h5 class="card-header">Upcoming events</h5>
+ <h5 class="card-header">{{t "upcomingevents" }}</h5>
{{> eventList upcomingEvents }}
</div>
<div class="card mt-4 mb-4" id="pastEvents">
- <h5 class="card-header">Past events</h5>
+ <h5 class="card-header">{{t "pastevents" }}</h5>
{{> eventList pastEvents }}
</div>
</div>
<div x-show="currentTab === 'groups'">
<div class="card mt-4 mb-4" id="eventGroups">
- <h5 class="card-header">Event groups</h5>
+ <h5 class="card-header">{{t "eventgroups" }}</h5>
<div class="list-group list-group-flush">
{{#if eventGroups}}
{{#each eventGroups}}
<a href="/group/{{this.id}}" class="list-group-item list-group-item-action">
<i class="fas fa-fw fa-calendar-alt"></i>
<strong>{{this.name}}</strong>
- <span class="badge badge-secondary ml-2">{{this.numberOfEvents}} {{plural this.numberOfEvents "event(s)"}}</span>
+ <span class="badge badge-secondary ml-2">{{{t "publiclist.numoevents" }}}</span>
</a>
{{/each}}
{{else}}
- <div class="list-group-item">No groups!</div>
+ <div class="list-group-item">{{t "publiclist.nogroups" }}</div>
{{/if}}
</div>