Publish German and Spanish homepage (/de/, /es/) with hreflang cluster and language switcher

Homepage pilot of the website i18n project. Adds the translated homepage for DE and
ES, the shared selector at /static/lang.js, and the hreflang cluster on all three
language versions (EN included, or the cluster is asymmetric and ignored).

- de/index.html, es/index.html: translator output plus the i18n build (html lang,
  self-referencing canonical, hreflang cluster, lang.js tag, switcher slot in the footer).
- index.html: same cluster + lang.js tag + switcher slot; canonical and og:url
  normalised to the lowercase host.
- static/lang.js: the tested selector (client-side language choice, auto-detect on the
  EN homepage only, once per session; a stored choice or ?lang= always wins).
- sitemap.xml: /de/ and /es/ (priority 1.0, lastmod 2026-10-24).
- llms.txt: new '## Languages' section.

Two gaps in the build recipe were closed while building: a mirrored page cannot use
root-relative source paths (style.css, images/* would resolve to /de/style.css -> 404),
so the build now re-points assets at the site root and keeps page links on the EN route
until the language page exists; and og:url is now this page's own URL instead of the
EN one inherited from the source. Not built yet: support.html, odoo-hosting-2027.html,
the blog, the bootcamp page, the legal pages.
This commit is contained in:
oliver committed 2026-10-24 21:22:13 +00:00
1 parent 2c7d9a393e
commit 937dbd4dbf
6 files changed
+1417 -2

No files matched your search

+9
View File
@@ -42,3 +42,12 @@
- Prices are list prices captured on 21 October 2026 and are re-checked before each publishing year.
- Findability: [sitemap.xml](https://odoo4projects.com/sitemap.xml).
## Languages
- German: https://odoo4projects.com/de/ — the site's pages mirrored under `/de/`.
- Spanish: https://odoo4projects.com/es/ — the site's pages mirrored under `/es/`.
- Language selection is client-side (`/static/lang.js`): a German- or
Spanish-preferring browser is sent to `/de/` or `/es/` once per session.
An explicit choice — `?lang=de|es|en` or the EN | DE | ES switcher — is
remembered and always wins. Deep links (`/de/...`) are never redirected.