Ignore:
Timestamp:
06/21/2026 03:16:51 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
11b3ba5
Parents:
4885eab
Message:

feat(i18n): admin-configurable language — personal + default for visitors

  • users.lang column: personal interface language per account (follows across devices/sessions). Switcher (/lang/:code) and Account select both write it.
  • app_setting default_lang: admin picks the default language for visitors in Admin → Settings (overrides env/browser; empty = automatic).
  • resolveLang priority: session choice → users.lang → default_lang (DB) → env KLONKT_DEFAULT_LANG → browser → nl.
  • Account: language select; admin-settings: default language select. NL/EN/DE keys.

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

File:
1 edited

Legend:

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

    r4885eab r5e61b17  
    3535          <small><%= t('aset.circle_desc') %></small>
    3636        </span>
     37      </label>
     38      <button type="submit" class="btn btn-primary"><%= t('aset.save') %></button>
     39    </form>
     40  </section>
     41
     42  <%# ── Standaardtaal voor bezoekers ── %>
     43  <section class="set-card" style="margin-top:1rem">
     44    <h2><%= t('aset.default_lang') %></h2>
     45    <p class="set-help"><%= t('aset.default_lang_hint') %></p>
     46    <form method="post" action="/admin/settings" class="set-form">
     47      <label class="set-field">
     48        <span><%= t('aset.default_lang') %></span>
     49        <select name="default_lang">
     50          <option value=""<%= !defaultLang ? ' selected' : '' %>><%= t('aset.default_lang_auto') %></option>
     51          <% langs.forEach(function(l){ %>
     52            <option value="<%= l.code %>"<%= defaultLang === l.code ? ' selected' : '' %>><%= l.name %></option>
     53          <% }); %>
     54        </select>
    3755      </label>
    3856      <button type="submit" class="btn btn-primary"><%= t('aset.save') %></button>
Note: See TracChangeset for help on using the changeset viewer.