Index: src/views/pages/post.ejs
===================================================================
--- src/views/pages/post.ejs	(revision 137cca552d3f0dbb017538eee312a41f1badc430)
+++ src/views/pages/post.ejs	(revision fe86013ffee7bc123a325a918c9b56311cad0aeb)
@@ -75,5 +75,5 @@
   <section class="post-comments" id="comments">
     <h2 class="comments-heading">
-      <%= totalComments %> comment<%= totalComments === 1 ? '' : 's' %>
+      <%= t(totalComments === 1 ? 'comments.heading_one' : 'comments.heading_other', { n: totalComments }) %>
     </h2>
 
@@ -86,5 +86,5 @@
           var s = document.createElement('div');
           s.className = 'comments-pending-flash';
-          s.textContent = 'Your comment is awaiting moderation. It will appear once an admin approves it.';
+          s.textContent = <%- JSON.stringify(t('comments.pending')) %>;
           document.currentScript.parentNode.insertBefore(s, document.currentScript);
         }
@@ -93,5 +93,5 @@
 
     <% if (!comments || !comments.length) { %>
-      <p class="comments-empty">No comments yet.<% if (!user) { %> <a href="/auth/login?next=<%= encodeURIComponent(_base + '/' + post.slug + '#comments') %>">Log in</a> to start the conversation.<% } %></p>
+      <p class="comments-empty"><%= t('comments.empty') %><% if (!user) { %> <a href="/auth/login?next=<%= encodeURIComponent(_base + '/' + post.slug + '#comments') %>"><%= t('nav.login') %></a> <%= t('comments.to_start') %><% } %></p>
     <% } else { %>
       <ol class="comments-list">
@@ -113,9 +113,9 @@
               <div class="comment-actions">
                 <% if (user && canMutate) { %>
-                  <button type="button" class="comment-reply-btn" data-reply-to="<%= c.id %>">Reply</button>
+                  <button type="button" class="comment-reply-btn" data-reply-to="<%= c.id %>"><%= t('comments.reply') %></button>
                 <% } %>
                 <% if (user && permissions.canDeleteComment(user, c, site)) { %>
-                  <form method="post" action="<%= _base %>/comments/<%= c.id %>/delete" style="display:inline" onsubmit="return confirm('Delete this comment?')">
-                    <button type="submit" class="comment-delete-btn">Delete</button>
+                  <form method="post" action="<%= _base %>/comments/<%= c.id %>/delete" style="display:inline" onsubmit="return confirm('<%= t('comments.delete_confirm') %>')">
+                    <button type="submit" class="comment-delete-btn"><%= t('comments.delete') %></button>
                   </form>
                 <% } %>
@@ -127,8 +127,8 @@
                   <input type="hidden" name="post_slug" value="<%= post.slug %>">
                   <input type="hidden" name="parent_comment_id" value="<%= c.id %>">
-                  <textarea name="content" rows="3" maxlength="4000" placeholder="Reply to <%= c.author_username %>…" required></textarea>
+                  <textarea name="content" rows="3" maxlength="4000" placeholder="<%= t('comments.reply_to', { name: c.author_username }) %>" required></textarea>
                   <div class="comment-reply-form-actions">
-                    <button type="submit" class="btn btn-primary">Reply</button>
-                    <button type="button" class="btn comment-cancel-reply">Cancel</button>
+                    <button type="submit" class="btn btn-primary"><%= t('comments.reply') %></button>
+                    <button type="button" class="btn comment-cancel-reply"><%= t('comments.cancel') %></button>
                   </div>
                 </form>
@@ -155,6 +155,6 @@
                         <div class="comment-actions">
                           <% if (user && permissions.canDeleteComment(user, r, site)) { %>
-                            <form method="post" action="<%= _base %>/comments/<%= r.id %>/delete" style="display:inline" onsubmit="return confirm('Delete this comment?')">
-                              <button type="submit" class="comment-delete-btn">Delete</button>
+                            <form method="post" action="<%= _base %>/comments/<%= r.id %>/delete" style="display:inline" onsubmit="return confirm('<%= t('comments.delete_confirm') %>')">
+                              <button type="submit" class="comment-delete-btn"><%= t('comments.delete') %></button>
                             </form>
                           <% } %>
@@ -176,12 +176,12 @@
         <input type="hidden" name="post_slug" value="<%= post.slug %>">
         <label class="comment-form-label">
-          <span>Add a comment as <strong><%= user.username %></strong></span>
-          <textarea name="content" rows="3" maxlength="4000" placeholder="Share your thoughts…" required></textarea>
+          <span><%= t('comments.add_as') %> <strong><%= user.username %></strong></span>
+          <textarea name="content" rows="3" maxlength="4000" placeholder="<%= t('comments.placeholder') %>" required></textarea>
         </label>
-        <button type="submit" class="btn btn-primary">Post comment</button>
+        <button type="submit" class="btn btn-primary"><%= t('comments.post') %></button>
       </form>
     <% } else if (!user) { %>
       <p class="comments-login-cta">
-        <a href="/auth/login?next=<%= encodeURIComponent(_base + '/' + post.slug + '#comments') %>" class="btn">Log in to comment</a>
+        <a href="/auth/login?next=<%= encodeURIComponent(_base + '/' + post.slug + '#comments') %>" class="btn"><%= t('comments.login_to_comment') %></a>
       </p>
     <% } else { %>
@@ -217,5 +217,5 @@
   <% if (relatedPosts && relatedPosts.length > 0) { %>
     <section class="post-related" aria-labelledby="related-heading">
-      <h2 class="post-related-heading" id="related-heading">Gerelateerde posts</h2>
+      <h2 class="post-related-heading" id="related-heading"><%= t('related.title') %></h2>
       <ul class="post-related-grid">
         <% relatedPosts.forEach(function(rp) { %>
Index: src/views/pages/search.ejs
===================================================================
--- src/views/pages/search.ejs	(revision 137cca552d3f0dbb017538eee312a41f1badc430)
+++ src/views/pages/search.ejs	(revision fe86013ffee7bc123a325a918c9b56311cad0aeb)
@@ -2,5 +2,5 @@
 <% const _tracks = (typeof tracks !== 'undefined' && tracks) ? tracks : []; %>
 <div class="container search-page">
-  <h1>Zoeken</h1>
+  <h1><%= t('nav.search') %></h1>
 
   <form method="get" action="<%= _base %>/search" class="search-page-form">
@@ -9,23 +9,23 @@
       name="q"
       value="<%= query %>"
-      placeholder="Zoek posts en nummers…"
+      placeholder="<%= t('search.placeholder') %>"
       autocomplete="off"
       autofocus
-      aria-label="Zoekopdracht">
-    <button type="submit" class="btn btn-primary">Zoek</button>
+      aria-label="<%= t('nav.search') %>">
+    <button type="submit" class="btn btn-primary"><%= t('search.button') %></button>
   </form>
 
   <% if (queryError) { %>
-    <p class="search-error">Kon die zoekopdracht niet uitvoeren. Probeer een eenvoudiger term.</p>
+    <p class="search-error"><%= t('search.error') %></p>
   <% } %>
 
   <% if (query && !queryError) { %>
     <p class="search-meta">
-      <%= total %> resulta<%= total === 1 ? 'at' : 'ten' %> voor &ldquo;<%= query %>&rdquo;
+      <%= t(total === 1 ? 'search.results_one' : 'search.results_other', { n: total, q: query }) %>
     </p>
   <% } %>
 
   <% if (_tracks.length) { %>
-    <h2 class="search-section-title">Nummers</h2>
+    <h2 class="search-section-title"><%= t('search.section_tracks') %></h2>
     <div class="search-tracks">
       <% _tracks.forEach(function(t) {
@@ -56,5 +56,5 @@
                hx-swap="innerHTML"
                hx-push-url="<%= t.postUrl %>"
-               aria-label="Open in post">in post →</a>
+               aria-label="<%= t('search.in_post') %>"><%= t('search.in_post') %></a>
           <% } %>
         </div>
@@ -64,5 +64,5 @@
 
   <% if (results && results.length) { %>
-    <% if (_tracks.length) { %><h2 class="search-section-title">Posts</h2><% } %>
+    <% if (_tracks.length) { %><h2 class="search-section-title"><%= t('search.section_posts') %></h2><% } %>
     <ol class="search-results">
       <% results.forEach(function(r) { %>
@@ -89,5 +89,5 @@
 
   <% if (query && !queryError && !results.length && !_tracks.length) { %>
-    <p class="search-empty">Niets gevonden.</p>
+    <p class="search-empty"><%= t('search.empty') %></p>
   <% } %>
 </div>
Index: src/views/partials/like-button.ejs
===================================================================
--- src/views/partials/like-button.ejs	(revision 137cca552d3f0dbb017538eee312a41f1badc430)
+++ src/views/partials/like-button.ejs	(revision fe86013ffee7bc123a325a918c9b56311cad0aeb)
@@ -18,5 +18,5 @@
 <% } else { %>
   <a class="like-btn" href="/auth/login?next=<%= encodeURIComponent((typeof loginNext !== 'undefined' && loginNext) ? loginNext : '/') %>"
-     title="Log in om deze post te liken">
+     title="<%= t('like.login_title') %>">
     <span class="like-heart" aria-hidden="true">♡</span>
     <span class="like-count"><%= _cnt %></span>
