refactor: Norwegian URL paths

User-visible SPA routes were a mix of English and Norwegian. Bring
them in line with the rest of the project's language:

  /home              → /hjem
  /a/:id             → /aktivitet/:id
  /<username>/list   → /<username>/liste
  /tags/:tag         → /etiketter/:etikett
  /invite/:token     → /invitasjon/:token

The English forms remain accepted by the SPA router (parsePath) and
the server OG handlers so links shared before the rename — invite
URLs in particular — still resolve. Outgoing links always use the
Norwegian forms. API paths (/api/users/:username/list etc.) stay in
English — they're internal contracts between client and server, not
user-visible URLs.

Server OG registration orders /<username>/liste before /aktivitet/:id
so a hypothetical user with the slug "aktivitet" still gets their
profile page rather than an activity-not-found. For normal activity
URLs the user-list route doesn't match (second segment must be the
literal "liste").

Profile copy referencing the URL slug also updated.
This commit is contained in:
Ole-Morten Duesund 2026-05-25 18:20:50 +02:00
commit f4816502ed
11 changed files with 80 additions and 51 deletions

View file

@ -43,7 +43,7 @@ export interface SettingsUpdateRequest {
// --- Invites ---------------------------------------------------------------
export interface InviteEntry {
/** The token itself. The shareable URL is built client-side as
* `${window.location.origin}/invite/${token}` server-side URL
* `${window.location.origin}/invitasjon/${token}` server-side URL
* construction would point at the API host in split-process dev
* environments. */
token: string;
@ -203,7 +203,7 @@ export interface ActivityPublic {
*/
owner_display: string | null;
// Owner's URL slug, if they've opted into a public list. When non-null, the
// client renders the owner attribution as a link to /<owner_username>/list.
// client renders the owner attribution as a link to /<owner_username>/liste.
owner_username: string | null;
title: string;
/** Optional free-text body. Plain text. Empty string and null treated the same client-side. */