Translate the whole site to English: English routes with 301 redirects from the Dutch paths, English UI, docs, seeds and captions, one-time live content migration

This commit is contained in:
2026-10-05 11:25:41 +02:00
parent bbdecdc95b
commit ff547e1677
153 changed files with 1095 additions and 774 deletions
+25 -25
View File
@@ -2,45 +2,45 @@
from molodetz.docs_api.registry import endpoint, field
GROUP = {
"slug": "inhoud",
"title": "Inhoud",
"description": "Publieke leesroutes: de rol, de standaard, berichten, galerijen en mensen.",
"slug": "content",
"title": "Content",
"description": "Public read routes: the roll, the standard, posts, galleries and people.",
"endpoints": [
endpoint("GET", "/", "Voorpagina", "Laatste berichten en uitgelichte flyer.", sample={"posts": [], "flyer_count": 4, "meme_count": 20}),
endpoint("GET", "/", "Home", "Latest posts and the featured flyer.", sample={"posts": [], "flyer_count": 4, "meme_count": 20}),
endpoint(
"GET",
"/rol",
"De rol",
"Gepubliceerde notities in het onderwerp rol, nieuwste eerst, cursor-gepagineerd.",
fields=[field("before", description="Cursor uit next_cursor", location="query")],
sample={"title": "Rol", "topic": "rol", "posts": [], "next_cursor": None},
"/roll",
"The roll",
"Published notes in the roll topic, newest first, cursor paginated.",
fields=[field("before", description="Cursor from next_cursor", location="query")],
sample={"title": "Roll", "topic": "roll", "posts": [], "next_cursor": None},
),
endpoint("GET", "/standaard", "De standaard", "Gepubliceerde berichten in het onderwerp standaard.", sample={"title": "Standaard", "topic": "standaard", "posts": []}),
endpoint("GET", "/standard", "The standard", "Published posts in the standard topic.", sample={"title": "Standard", "topic": "standard", "posts": []}),
endpoint(
"GET",
"/posts/{slug}",
"Bericht",
"Een gepubliceerd bericht via slug of uid.",
fields=[field("slug", required=True, location="path", example="een-zes-is-geen-ambitie")],
sample={"post": {"title": "Een zes is geen ambitie.", "topic": "rol"}, "author": {"username": "retoor"}},
probe_path="/posts/bestaat-niet",
"Post",
"A published post by slug or uid. Old slugs redirect with 301 to the canonical slug.",
fields=[field("slug", required=True, location="path", example="a-pass-is-not-an-ambition")],
sample={"post": {"title": "A pass is not an ambition.", "topic": "roll"}, "author": {"username": "retoor"}},
probe_path="/posts/does-not-exist",
),
endpoint("GET", "/flyers", "Flyers", "Galerij met flyers.", sample={"kind": "flyer", "title": "Flyers", "items": []}),
endpoint("GET", "/memes", "Memes", "Galerij met memes.", sample={"kind": "meme", "title": "Memes", "items": []}),
endpoint("GET", "/mensen", "Mensen", "Mensen op de rol.", sample={"people": [{"username": "retoor", "post_count": 5}]}),
endpoint("GET", "/flyers", "Flyers", "Flyer gallery.", sample={"kind": "flyer", "title": "Flyers", "items": []}),
endpoint("GET", "/memes", "Memes", "Meme gallery.", sample={"kind": "meme", "title": "Memes", "items": []}),
endpoint("GET", "/people", "People", "People on the roll.", sample={"people": [{"username": "retoor", "post_count": 5}]}),
endpoint(
"GET",
"/mensen/{username}",
"Persoon",
"Profiel met berichten.",
"/people/{username}",
"Person",
"Profile with posts.",
fields=[field("username", required=True, location="path", example="retoor")],
sample={"person": {"username": "retoor"}, "posts": []},
probe_path="/mensen/retoor",
probe_path="/people/retoor",
),
endpoint("GET", "/robots.txt", "robots.txt", negotiation="none", interactive=False),
endpoint("GET", "/sitemap.xml", "Sitemap", negotiation="none", interactive=False),
endpoint("GET", "/avatar/svg/{seed}", "Avatar", "Deterministische SVG-avatar.", negotiation="none", interactive=False, probe_path="/avatar/svg/retoor"),
endpoint("GET", "/health", "Health", "Liveness en versie.", negotiation="json", sample={"status": "ok", "version": "1.0.0"}),
endpoint("GET", "/presence/roster", "Presence", "Online-set (uids).", negotiation="json", sample={"online": [], "tracked": 0}),
endpoint("GET", "/avatar/svg/{seed}", "Avatar", "Deterministic SVG avatar.", negotiation="none", interactive=False, probe_path="/avatar/svg/retoor"),
endpoint("GET", "/health", "Health", "Liveness and version.", negotiation="json", sample={"status": "ok", "version": "1.0.0"}),
endpoint("GET", "/presence/roster", "Presence", "Online set (uids).", negotiation="json", sample={"online": [], "tracked": 0}),
],
}