Repository navigation
Releases: devotion-patrick/xperience-community-language-domains
Release list
v0.1.0-preview.1 - initial preview
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:
- Shape-tolerant proxy. Matches by leading
(int, int)parameters with arity tolerance, so a single binary handles v30.6.x's 2-argRetrieveand v30.7+'s 3-argRetrieve(int, int, CancellationToken). - Loud failure on unknown shapes. If a future XbyK release ships an unrecognised signature, the proxy logs a descriptive
ErrorviaILogger(visible in Kentico's event log) instead of silently no-op'ing the admin URLs tab. - Weekly drift sweep.
.github/workflows/xbyk-sweep.ymlreflects on every publishedKentico.Xperience.Admin >= 30.6.0and 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
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:
- Shape-tolerant proxy. Matches by leading
(int, int)parameters with arity tolerance, so a single binary handles v30.6.x's 2-argRetrieveand v30.7+'s 3-argRetrieve(int, int, CancellationToken). - Loud failure on unknown shapes. If a future XbyK release ships an unrecognised signature, the proxy logs a descriptive
ErrorviaILogger(visible in Kentico's event log) instead of silently no-op'ing the admin URLs tab. - Weekly drift sweep.
.github/workflows/xbyk-sweep.ymlreflects on every publishedKentico.Xperience.Admin >= 30.6.0and 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
HostnameAwarePreferredLanguageRetrievernow points at the correctHostnameLookupIndex.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.