Feature/post media translations (#42)

* chore: updated todo with translation ideas

* feat: first take at the implementation of translations

* fix: small addition for the translation feature

* feat: support language switching in the editor and preview

* feat: better handling of long bodies by not running them through a json envelope

* fix: unknown macros have better fallback

* feat: api for python to get translations

* fix: strip dumb prefix of content in translation

* feat: extend meta diff for translations

* feat: hook up translations to rebuild-from-disk

* feat: generation of the website prefers project language, falling back to canonical language

* fix: crashes during rendering

* feat: translation validation report

* fix: made the translation validation actually work

* chore: reorganization of menu

* fix: some topics cleanup

* chore: updated doc

* feat: translations for media

* feat: more aligned in UI/UX

* feat: edit translations possible

* chore: added full multi-language todo

* chore: updated todo for clarity

* feat: implementation of full multi-linguality

* fix: page creation creates pages

* fix: flags on every page

* fix: better prompt

* feat: made MCP server aware of language content

* feat: python tools for translations

* fix: better fill-in-translations

* fix: better prompt for translation. maybe.

* fix: losing posts from search due to translation process

* fix: translation validation handles in-db content and fill-in of missing translations fixed to flush

* fix: faster scanning for infilling of missing translations

* chore: updated agent instructions

* feat: calendar and tag cloud respect current language now

* fix: retries going up

* fix: got metadata-diff and rebuild into sync

* fix: extended meta-diff for timestamps

* fix: made website validation look at translated content, too

* fix: multi-lingual search

* chore: refactor Editor.tsx into two separate editors

* feat: do language detection when no explicit language given

---------

Co-authored-by: hugo <hugoms@me.com>
This commit is contained in:
Georg Bauer
2026-03-09 14:43:18 +01:00
committed by GitHub
parent f1c9038803
commit b855d61524
116 changed files with 19954 additions and 2094 deletions

View File

@@ -0,0 +1,17 @@
CREATE TABLE `post_translations` (
`id` text PRIMARY KEY NOT NULL,
`project_id` text NOT NULL,
`translation_for` text NOT NULL,
`language` text NOT NULL,
`title` text NOT NULL,
`excerpt` text,
`content` text,
`status` text DEFAULT 'draft' NOT NULL,
`created_at` integer NOT NULL,
`updated_at` integer NOT NULL,
`published_at` integer,
`file_path` text DEFAULT '' NOT NULL,
`checksum` text
);
--> statement-breakpoint
CREATE UNIQUE INDEX `post_translations_translation_language_idx` ON `post_translations` (`translation_for`,`language`);

View File

@@ -0,0 +1,14 @@
CREATE TABLE `media_translations` (
`id` text PRIMARY KEY NOT NULL,
`project_id` text NOT NULL,
`translation_for` text NOT NULL,
`language` text NOT NULL,
`title` text,
`alt` text,
`caption` text,
`created_at` integer NOT NULL,
`updated_at` integer NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `media_translations_translation_language_idx` ON `media_translations` (`translation_for`,`language`);--> statement-breakpoint
ALTER TABLE `media` ADD `language` text;

View File

@@ -0,0 +1 @@
ALTER TABLE `posts` ADD `do_not_translate` integer DEFAULT false NOT NULL;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -92,6 +92,27 @@
"when": 1772738580546,
"tag": "0012_flimsy_meteorite",
"breakpoints": true
},
{
"idx": 13,
"version": "6",
"when": 1772882271754,
"tag": "0013_swift_devos",
"breakpoints": true
},
{
"idx": 14,
"version": "6",
"when": 1772959578621,
"tag": "0014_media_translations",
"breakpoints": true
},
{
"idx": 15,
"version": "6",
"when": 1772967539676,
"tag": "0015_melted_zzzax",
"breakpoints": true
}
]
}