Ignore:
Timestamp:
06/21/2026 02:32:39 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
4885eab
Parents:
929d98d
Message:

feat(i18n phase 5): all admin sub-pages translated (NL/EN/DE)

settings, site-edit, seo, google, audio, stats, playlists, users, sites,
comments, circle, shows, newsletter, updates, epk, help. ~520 new keys
per language. Loop-shadowing of t() resolved by fetching before the loop. 709
view-keys cross-checked against the dictionary (0 missing).

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/pages/admin-site-edit.ejs

    r929d98d rbbf9d1a  
    11<div class="container admin-site-edit-page">
    2   <p><a href="/admin" class="btn">&larr; Beheer</a></p>
    3   <h1><%= isNew ? 'Nieuwe site' : 'Uiterlijk: ' + site.title %></h1>
     2  <p><a href="/admin" class="btn">&larr; <%= t('asite.back_admin') %></a></p>
     3  <h1><%= isNew ? t('asite.title_new') : t('asite.title_edit') + ': ' + site.title %></h1>
    44
    55  <% if (typeof success !== 'undefined' && success) { %><div class="audio-flash audio-flash--ok"><%= success %></div><% } %>
     
    99
    1010    <fieldset>
    11       <legend>Identiteit</legend>
    12       <label>
    13         <span>Slug (URL) <% if (!isNew) { %><em>(vast)</em><% } %></span>
     11      <legend><%= t('asite.identity') %></legend>
     12      <label>
     13        <span><%= t('asite.slug') %> <% if (!isNew) { %><em><%= t('asite.slug_fixed') %></em><% } %></span>
    1414        <span class="slug-url">
    1515          <span class="slug-url-host" id="slug-host"
    1616                data-prefix="<%= (typeof tenancy !== 'undefined' && tenancy === 'hub') ? '/user/' : '/' %>">website.com/</span><input
    1717                type="text" name="slug" id="slug-input" class="slug-url-input" value="<%= site.slug %>" required <% if (!isNew) { %>readonly<% } %>
    18                 pattern="[a-z0-9_-]{2,40}" placeholder="jouwslug"
     18                pattern="[a-z0-9_-]{2,40}" placeholder="<%= t('asite.slug_placeholder') %>"
    1919                autocapitalize="none" autocorrect="off" spellcheck="false">
    2020        </span>
    2121      </label>
    2222      <label>
    23         <span>Titel <small class="form-hint-inline">— getoond in de kop en als weergavenaam</small></span>
     23        <span><%= t('asite.field_title') %> <small class="form-hint-inline"><%= t('asite.field_title_hint') %></small></span>
    2424        <input type="text" name="title" value="<%= site.title || '' %>" required maxlength="200">
    2525      </label>
     
    2828      <% if (user && user.role === 'god') { %>
    2929      <label>
    30         <span>Eigenaar <small class="form-hint-inline">— wie deze Klonkt zelf mag beheren</small></span>
     30        <span><%= t('asite.owner') %> <small class="form-hint-inline"><%= t('asite.owner_hint') %></small></span>
     31        <% var _godSuffix = t('asite.owner_god_suffix'); %>
    3132        <select name="owner_id">
    3233          <% (typeof users !== 'undefined' ? users : []).forEach(function(u){ %>
    33             <option value="<%= u.id %>" <%= (site.owner_id === u.id) ? 'selected' : '' %>><%= u.username %><%= u.role === 'god' ? ' (god)' : '' %></option>
     34            <option value="<%= u.id %>" <%= (site.owner_id === u.id) ? 'selected' : '' %>><%= u.username %><%= u.role === 'god' ? _godSuffix : '' %></option>
    3435          <% }); %>
    3536        </select>
     
    3738      <% } %>
    3839      <label>
    39         <span>Tagline <small class="form-hint-inline">— korte oneliner</small></span>
     40        <span><%= t('asite.tagline') %> <small class="form-hint-inline"><%= t('asite.tagline_hint') %></small></span>
    4041        <input type="text" name="tagline" value="<%= site.tagline || '' %>" maxlength="200">
    4142      </label>
    4243      <label>
    43         <span>Bio / omschrijving <small class="form-hint-inline">— getoond in de profielkop en gebruikt voor SEO</small></span>
     44        <span><%= t('asite.bio') %> <small class="form-hint-inline"><%= t('asite.bio_hint') %></small></span>
    4445        <textarea name="description" rows="3" maxlength="500"><%= site.description || '' %></textarea>
    4546      </label>
    4647      <label>
    47         <span>Profielfoto</span>
     48        <span><%= t('asite.profile_photo') %></span>
    4849        <div class="photo-picker" id="photo-picker">
    4950          <div class="photo-thumb" id="photo-thumb" <%= site.profile_photo ? '' : 'data-empty' %>>
     
    5455          </div>
    5556          <div class="photo-controls">
    56             <input type="text" name="profile_photo" id="photo-url" value="<%= site.profile_photo || '' %>" placeholder="/media/avatars/foo.jpg of https://…">
     57            <input type="text" name="profile_photo" id="photo-url" value="<%= site.profile_photo || '' %>" placeholder="<%= t('asite.photo_url_placeholder') %>">
    5758            <div class="photo-actions">
    58               <button type="button" class="btn" id="photo-upload-trigger">📷 Uploaden</button>
    59               <button type="button" class="btn" id="photo-clear" <%= site.profile_photo ? '' : 'hidden' %>>Verwijder</button>
     59              <button type="button" class="btn" id="photo-upload-trigger"><%= t('asite.photo_upload') %></button>
     60              <button type="button" class="btn" id="photo-clear" <%= site.profile_photo ? '' : 'hidden' %>><%= t('asite.photo_clear') %></button>
    6061              <small id="photo-status" class="form-hint photo-status"></small>
    6162            </div>
     
    6566      </label>
    6667      <label>
    67         <span>Taal (ISO-code)</span>
     68        <span><%= t('asite.language') %></span>
    6869        <input type="text" name="language" value="<%= site.language || 'nl' %>" maxlength="8">
    6970      </label>
    7071      <label class="cb">
    7172        <input type="checkbox" name="profile_enabled" value="1" <%= site.profile_enabled ? 'checked' : '' %>>
    72         <span>Profielkop tonen onder de navigatie</span>
     73        <span><%= t('asite.profile_enabled') %></span>
    7374      </label>
    7475    </fieldset>
    7576
    7677    <fieldset>
    77       <legend>Vormgeving</legend>
     78      <legend><%= t('asite.appearance') %></legend>
    7879
    7980      <%# ── Curated accent picker ───────────────────────────────────────
     
    8283          still what's stored in the DB — we just constrain WHICH hex. %>
    8384      <fieldset class="accent-grid">
    84         <legend>Accentkleur</legend>
     85        <legend><%= t('asite.accent_color') %></legend>
    8586        <% const _curAccent = (site.accent || '#c2410c').toLowerCase(); %>
    8687        <% accents.forEach(function(a) { %>
     
    99100          visitors with a localStorage override, still win over this default. %>
    100101      <fieldset class="theme-default">
    101         <legend>Standaardthema voor nieuwe bezoekers</legend>
     102        <legend><%= t('asite.theme_default') %></legend>
    102103        <% const td = site.theme_override || ''; %>
    103104        <label class="cb">
    104105          <input type="radio" name="theme_override" value=""      <%= td === ''      ? 'checked' : '' %>>
    105           <span>Auto (volg device-voorkeur)</span>
     106          <span><%= t('asite.theme_auto') %></span>
    106107        </label>
    107108        <label class="cb">
    108109          <input type="radio" name="theme_override" value="light" <%= td === 'light' ? 'checked' : '' %>>
    109           <span>Licht</span>
     110          <span><%= t('asite.theme_light') %></span>
    110111        </label>
    111112        <label class="cb">
    112113          <input type="radio" name="theme_override" value="dark"  <%= td === 'dark'  ? 'checked' : '' %>>
    113           <span>Donker</span>
     114          <span><%= t('asite.theme_dark') %></span>
    114115        </label>
    115116      </fieldset>
    116117
    117118      <fieldset class="palette-grid">
    118         <legend>Palet</legend>
     119        <legend><%= t('asite.palette') %></legend>
    119120        <% palettes.forEach(function(p) { %>
    120121          <label class="palette-swatch">
     
    137138
    138139    <fieldset>
    139       <legend>Gedrag</legend>
     140      <legend><%= t('asite.behavior') %></legend>
    140141      <label class="cb">
    141142        <input type="checkbox" name="is_public" value="1" <%= site.is_public ? 'checked' : '' %>>
    142         <span>Publieke site (uitvinken voor een besloten kring)</span>
     143        <span><%= t('asite.is_public') %></span>
    143144      </label>
    144145      <label class="cb">
    145146        <input type="checkbox" name="robots_index" value="1" <%= site.robots_index ? 'checked' : '' %>>
    146         <span>Zoekmachines mogen indexeren (sitemap.xml is verborgen indien uit)</span>
     147        <span><%= t('asite.robots_index') %></span>
    147148      </label>
    148149      <label class="cb">
    149150        <input type="checkbox" name="require_login_to_comment" value="1" <%= site.require_login_to_comment ? 'checked' : '' %>>
    150         <span>Inloggen vereist om te reageren</span>
    151       </label>
    152       <label>
    153         <span>Reactie-moderatie</span>
     151        <span><%= t('asite.require_login_comment') %></span>
     152      </label>
     153      <label>
     154        <span><%= t('asite.comment_moderation') %></span>
    154155        <select name="comments_moderation_mode">
    155           <option value="trust"    <%= (site.comments_moderation_mode || 'trust') === 'trust'    ? 'selected' : '' %>>Vertrouwen (automatisch goedkeuren)</option>
    156           <option value="moderate" <%= site.comments_moderation_mode === 'moderate' ? 'selected' : '' %>>Modereren (eerst in de wachtrij)</option>
     156          <option value="trust"    <%= (site.comments_moderation_mode || 'trust') === 'trust'    ? 'selected' : '' %>><%= t('asite.moderation_trust') %></option>
     157          <option value="moderate" <%= site.comments_moderation_mode === 'moderate' ? 'selected' : '' %>><%= t('asite.moderation_moderate') %></option>
    157158        </select>
    158159      </label>
    159160      <label class="cb">
    160161        <input type="checkbox" name="enable_audio_player" value="1" <%= site.enable_audio_player ? 'checked' : '' %>>
    161         <span>Audiospeler + embeds inschakelen</span>
     162        <span><%= t('asite.enable_audio') %></span>
    162163      </label>
    163164      <%# Prutter is een Hub-only premium-functie — toggle alleen tonen in Hub-modus. %>
     
    165166      <label class="cb">
    166167        <input type="checkbox" name="enable_prutter" value="1" <%= site.enable_prutter ? 'checked' : '' %>>
    167         <span>Prutter (DM&rsquo;s tussen leden) inschakelen <small class="form-hint-inline">— Hub-functie, premium</small></span>
     168        <span><%= t('asite.enable_prutter') %> <small class="form-hint-inline"><%= t('asite.enable_prutter_hint') %></small></span>
    168169      </label>
    169170      <% } %>
     
    171172
    172173    <fieldset class="profile-links-fieldset">
    173       <legend>Social / streaming-links</legend>
    174       <p class="form-hint">Getoond als merk-iconen op de profielkop. Voeg er zoveel toe als je wilt.</p>
     174      <legend><%= t('asite.links') %></legend>
     175      <p class="form-hint"><%= t('asite.links_hint') %></p>
    175176
    176177      <div id="profile-links-rows">
     
    200201      </template>
    201202
    202       <button type="button" id="profile-link-add" class="btn">+ Link toevoegen</button>
     203      <button type="button" id="profile-link-add" class="btn"><%= t('asite.link_add') %></button>
    203204    </fieldset>
    204205
    205206    <fieldset>
    206       <legend>Feed-weergave</legend>
    207       <label>
    208         <span>Standaardweergave voor de homepage</span>
     207      <legend><%= t('asite.feed_view') %></legend>
     208      <label>
     209        <span><%= t('asite.feed_default') %></span>
    209210        <select name="feed_view_default">
    210           <option value="timeline" <%= (site.feed_view_default || 'timeline') === 'timeline' ? 'selected' : '' %>>Tijdlijn (chronologische lijst)</option>
    211           <option value="grid"     <%= site.feed_view_default === 'grid' ? 'selected' : '' %>>Grid (kaarten)</option>
     211          <option value="timeline" <%= (site.feed_view_default || 'timeline') === 'timeline' ? 'selected' : '' %>><%= t('asite.feed_timeline') %></option>
     212          <option value="grid"     <%= site.feed_view_default === 'grid' ? 'selected' : '' %>><%= t('asite.feed_grid') %></option>
    212213        </select>
    213214      </label>
    214215      <label class="cb">
    215216        <input type="checkbox" name="feed_view_switch" value="1" <%= site.feed_view_switch ? 'checked' : '' %>>
    216         <span>Tijdlijn ↔ grid-schakelaar boven de feed tonen</span>
     217        <span><%= t('asite.feed_switch') %></span>
    217218      </label>
    218219      <label class="cb">
    219220        <input type="checkbox" name="show_search" value="1" <%= site.show_search ? 'checked' : '' %>>
    220         <span>Zoekknop in de navigatie tonen</span>
     221        <span><%= t('asite.show_search') %></span>
    221222      </label>
    222223      <label class="cb">
    223224        <input type="checkbox" name="show_archive_link" value="1" <%= site.show_archive_link ? 'checked' : '' %>>
    224         <span>Archief-link in de navigatie tonen</span>
     225        <span><%= t('asite.show_archive') %></span>
    225226      </label>
    226227    </fieldset>
    227228
    228229    <fieldset class="seo-pointer">
    229       <legend>SEO &amp; social</legend>
    230       <p>Titel-sjabloon, canonical, deel-afbeelding, verificatie-metas en meer staan
    231         nu op een eigen pagina: <a href="/admin/seo">🔎 SEO &amp; vindbaarheid</a>.</p>
     230      <legend><%= t('asite.seo') %></legend>
     231      <p><%= t('asite.seo_pointer') %> <a href="/admin/seo"><%= t('asite.seo_link') %></a>.</p>
    232232    </fieldset>
    233233
    234234    <fieldset>
    235       <legend>Eigen CSS &amp; HTML <em>(optioneel)</em></legend>
    236       <label>
    237         <span>Eigen CSS (geïnjecteerd als &lt;style&gt; in &lt;head&gt;)</span>
     235      <legend><%= t('asite.custom_legend') %> <em><%= t('asite.optional') %></em></legend>
     236      <label>
     237        <span><%= t('asite.custom_css') %></span>
    238238        <textarea name="custom_css" rows="3" placeholder=".foo { color: red; }"><%= site.custom_css || '' %></textarea>
    239239      </label>
    240240      <label>
    241         <span>Eigen &lt;head&gt;-HTML (analytics, extra meta&rsquo;s)</span>
     241        <span><%= t('asite.custom_head') %></span>
    242242        <textarea name="custom_head_html" rows="3" placeholder="<meta name=&quot;...&quot;>"><%= site.custom_head_html || '' %></textarea>
    243243      </label>
    244244      <label>
    245         <span>Eigen footer-HTML</span>
     245        <span><%= t('asite.custom_foot') %></span>
    246246        <textarea name="custom_foot_html" rows="3"><%= site.custom_foot_html || '' %></textarea>
    247247      </label>
    248248    </fieldset>
    249249
    250     <button type="submit" class="btn btn-primary"><%= isNew ? 'Site aanmaken' : 'Wijzigingen opslaan' %></button>
     250    <button type="submit" class="btn btn-primary"><%= isNew ? t('asite.submit_create') : t('asite.submit_save') %></button>
    251251  </form>
    252252</div>
Note: See TracChangeset for help on using the changeset viewer.