i18n phase 2: publish DE + ES for odoo-hosting-2027.html and support.html

Four new pages, built from the verified translator output with work/i18n/build-i18n.py,
plus the same hreflang cluster and top-bar language selector on the two English pages.
Same recipe as the homepage pilot (main 937dbd4 / 06beab4); nothing else touched.

- de|es/odoo-hosting-2027.html, de|es/support.html: per-language canonical, the full
  hreflang cluster (en-US, de, es, x-default -> EN), /static/lang.js, and the switcher
  slot placed in the page's own top bar (.cmp-topbar on the 2027 page, .blog-header on
  support.html) with the per-shape CSS hook from I18N-BUILD-PLAN.md §3.
- odoo-hosting-2027.html, support.html: same cluster, same selector, so the cluster is
  symmetric (asymmetric hreflang is discarded by Google). support.html's canonical and
  og:url were still on the capitalised ODOO4projects.com host; the build normalises them
  to the lowercase form the rest of the site and sitemap.xml use.
- Internal links: the build's rebase step now also localises a root-absolute page link
  (/support.html#contact in the translator's 2027 pages) once that page exists in the
  language. /de/support.html, /de/odoo-hosting-2027.html, /de/, /de/#pricing and
  /de/#trialCard are local; /legal.html stays on the EN route because the legal pages
  are not translated (lawyer review pending).
- sitemap.xml: +4 URLs, lastmod 2026-10-24, priority reused from the EN entry (2027 -> 0.9,
  support.html -> 0.6 fallback, it has no EN entry). 17 -> 21 <loc>, no duplicates.
- llms.txt: the ## Languages section now names the mirrored pages.

Checks: verify-html.py PROBLEMS: 0; node --check static/lang.js OK; test-lang.js 31/31;
test-build.py 64/64 (was 43; +21 for the four built pages and the root-absolute rule);
check-links.py on the four new pages BROKEN/MISPLACED: 0.
This commit is contained in:
oliver committed 2026-10-24 21:56:08 +00:00
1 parent 0721804aab
commit b69e4ceaed
8 files changed
+3302 -4

No files matched your search

+23 -2
View File
@@ -8,11 +8,15 @@
content="Support and FAQ for ODOO4projects hosting. Get help with your Odoo instance, modules, backups, domains, and more."
/>
<title>Support | ODOO4projects</title>
<link rel="canonical" href="https://ODOO4projects.com/support.html" />
<link rel="canonical" href="https://odoo4projects.com/support.html" />
<link rel="alternate" hreflang="en-US" href="https://odoo4projects.com/support.html" />
<link rel="alternate" hreflang="de" href="https://odoo4projects.com/de/support.html" />
<link rel="alternate" hreflang="es" href="https://odoo4projects.com/es/support.html" />
<link rel="alternate" hreflang="x-default" href="https://odoo4projects.com/support.html" />
<meta property="og:title" content="Support | ODOO4projects" />
<meta property="og:description" content="Support and FAQ for ODOO4projects hosting." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://ODOO4projects.com/support.html" />
<meta property="og:url" content="https://odoo4projects.com/support.html" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" href="images/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
@@ -27,6 +31,21 @@
/>
<link rel="stylesheet" href="style.css" />
<style>
/* Language selector — the page's top row: the back-link stays left, the selector travels right.
Cream canvas, so lang.js's own dark-brass active colour is the correct one (no override). */
.blog-header {
display: flex;
align-items: center;
}
.blog-header > a {
margin-right: auto;
}
.blog-header .lang-switch-slot {
display: flex;
align-items: center;
padding-left: 1rem;
border-left: 1px solid rgba(201, 162, 39, 0.45);
}
/* ---- Support Hero ---- */
.support-hero {
padding: 4rem 0 2.5rem;
@@ -249,11 +268,13 @@
.contact-form { padding: 1.25rem; }
}
</style>
<script defer src="/static/lang.js"></script>
</head>
<body>
<div class="container">
<div class="blog-header">
<a href="index.html">&larr; Back to Home</a>
<div data-lang-switcher class="lang-switch-slot"></div>
</div>
</div>