Skip to content

Releases: devotion-patrick/xperience-community-language-domains

v0.1.0-preview.1 - initial preview

Pre-release

Choose a tag to compare

@devotion-patrick devotion-patrick released this 06 May 00:56

First public preview of XperienceCommunity.LanguageDomains. Hostname-based language switching for Xperience by Kentico website channels: each language served from its own host, optional removal of the /{langcode}/ path prefix from public URLs, and an admin URLs tab that reflects what end users actually see.

Highlights

  • Hostname-driven language resolution. Bind each language to its own host (en.example.com, es.example.com), with the channel's primary language at the bare root.
  • Optional path-prefix stripping. Render public URLs without the /{langcode}/ segment Kentico stores against — routing still resolves correctly internally.
  • Admin URLs tab in sync. The URL list in admin reflects the same hostname rewriting end users see, so editors aren't second-guessing.
  • Canonical redirect middleware. 301s requests on non-canonical host/prefix combinations to the correct host for their language.

Compatibility

Xperience by Kentico minimum 30.6.1, no upper bound — verified against all 43 published releases through 31.4.3
.NET targets net8.0; consumed cleanly from net8 / net9 / net10 host apps
Hosting ASP.NET Core (Kestrel direct or behind an IIS reverse proxy)

Why preview

This is 0.1.0-preview.1 rather than 0.1.0 because the public API hasn't yet been exercised across enough host projects to commit to its shape. Expect breaking changes between previews. Promotion to a stable 0.1.0 follows once the surface settles.

Drift tolerance

The library decorates an internal Kentico admin interface (IWebPageUrlListItemsRetriever) via reflection — inherently fragile across XbyK refreshes. Three guard rails keep the failure mode loud rather than silent:

  1. Shape-tolerant proxy. Matches by leading (int, int) parameters with arity tolerance, so a single binary handles v30.6.x's 2-arg Retrieve and v30.7+'s 3-arg Retrieve(int, int, CancellationToken).
  2. Loud failure on unknown shapes. If a future XbyK release ships an unrecognised signature, the proxy logs a descriptive Error via ILogger (visible in Kentico's event log) instead of silently no-op'ing the admin URLs tab.
  3. Weekly drift sweep. .github/workflows/xbyk-sweep.yml reflects on every published Kentico.Xperience.Admin >= 30.6.0 and re-runs the contract tests, capping detection latency at ~7 days from any future drift.

Setup

  • README — wiring (AddHostnameCultureMapping, the two middlewares, optional admin URLs tab decorator).
  • docs/Usage-Guide.md — design rationale and full configuration reference.

Install

dotnet add package XperienceCommunity.LanguageDomains --prerelease

The --prerelease flag is required while this is on a -preview channel.

v0.1.0 - first stable release

Choose a tag to compare

@devotion-patrick devotion-patrick released this 06 May 01:04

First stable release of XperienceCommunity.LanguageDomains. Hostname-based language switching for Xperience by Kentico website channels: each language served from its own host, optional removal of the /{langcode}/ path prefix from public URLs, and an admin URLs tab that reflects what end users actually see.

Highlights

  • Hostname-driven language resolution. Bind each language to its own host (en.example.com, es.example.com), with the channel's primary language at the bare root.
  • Optional path-prefix stripping. Render public URLs without the /{langcode}/ segment Kentico stores against — routing still resolves correctly internally.
  • Admin URLs tab in sync. The URL list in admin reflects the same hostname rewriting end users see, so editors aren't second-guessing.
  • Canonical redirect middleware. 301s requests on non-canonical host/prefix combinations to the correct host for their language.

Compatibility

Xperience by Kentico minimum 30.6.1, no upper bound — verified against all 43 published releases through 31.4.3
.NET targets net8.0; consumed cleanly from net8 / net9 / net10 host apps
Hosting ASP.NET Core (Kestrel direct or behind an IIS reverse proxy)

Drift tolerance

The library decorates an internal Kentico admin interface (IWebPageUrlListItemsRetriever) via reflection — inherently fragile across XbyK refreshes. Three guard rails keep the failure mode loud rather than silent:

  1. Shape-tolerant proxy. Matches by leading (int, int) parameters with arity tolerance, so a single binary handles v30.6.x's 2-arg Retrieve and v30.7+'s 3-arg Retrieve(int, int, CancellationToken).
  2. Loud failure on unknown shapes. If a future XbyK release ships an unrecognised signature, the proxy logs a descriptive Error via ILogger (visible in Kentico's event log) instead of silently no-op'ing the admin URLs tab.
  3. Weekly drift sweep. .github/workflows/xbyk-sweep.yml reflects on every published Kentico.Xperience.Admin >= 30.6.0 and re-runs the contract tests, capping detection latency at ~7 days from any future drift.

Setup

  • README — wiring (AddHostnameCultureMapping, the two middlewares, optional admin URLs tab decorator).
  • docs/Usage-Guide.md — design rationale and full configuration reference.

Install

dotnet add package XperienceCommunity.LanguageDomains

Changes since the preview

  • XML doc cref in HostnameAwarePreferredLanguageRetriever now points at the correct HostnameLookupIndex.Match (was a stale reference to a renamed type — produced a build-time warning, no runtime effect).
  • No API changes. The public surface is identical to 0.1.0-preview.1.