From 21fcd944d528557b89fc8b351579beabdcc06ff6 Mon Sep 17 00:00:00 2001 From: HiDeoo Date: Wed, 16 Jul 2025 13:07:37 +0200 Subject: Fix Astro i18n default locale regression (#3306) --- .changeset/early-kings-fly.md | 5 +++ .../i18n-root-default-locale/i18n.test.ts | 39 ++++++++++++++++++++++ .../i18n-root-default-locale/vitest.config.ts | 11 ++++++ packages/starlight/utils/i18n.ts | 5 ++- 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 .changeset/early-kings-fly.md create mode 100644 packages/starlight/__tests__/i18n-root-default-locale/i18n.test.ts create mode 100644 packages/starlight/__tests__/i18n-root-default-locale/vitest.config.ts diff --git a/.changeset/early-kings-fly.md b/.changeset/early-kings-fly.md new file mode 100644 index 00000000..ec0178a6 --- /dev/null +++ b/.changeset/early-kings-fly.md @@ -0,0 +1,5 @@ +--- +'@astrojs/starlight': patch +--- + +Fixes a regression in Starlight version `0.34.5` that caused multilingual sites with a default locale explicitly set to `root` to report a configuration error. diff --git a/packages/starlight/__tests__/i18n-root-default-locale/i18n.test.ts b/packages/starlight/__tests__/i18n-root-default-locale/i18n.test.ts new file mode 100644 index 00000000..fb48dcf4 --- /dev/null +++ b/packages/starlight/__tests__/i18n-root-default-locale/i18n.test.ts @@ -0,0 +1,39 @@ +import { assert, describe, expect, test } from 'vitest'; +import config from 'virtual:starlight/user-config'; +import { processI18nConfig } from '../../utils/i18n'; + +describe('processI18nConfig', () => { + test('returns Astro i18n config for a multilingual site with a root default locale', () => { + const { astroI18nConfig, starlightConfig } = processI18nConfig(config, undefined); + + // The default locale matches the root locale's `lang` property. + expect(astroI18nConfig.defaultLocale).toBe('fr'); + expect(astroI18nConfig.locales).toMatchInlineSnapshot(` + [ + { + "codes": [ + "fr", + ], + "path": "fr", + }, + { + "codes": [ + "en-US", + ], + "path": "en", + }, + { + "codes": [ + "ar", + ], + "path": "ar", + }, + ] + `); + assert(typeof astroI18nConfig.routing !== 'string'); + expect(astroI18nConfig.routing?.prefixDefaultLocale).toBe(false); + + // The Starlight configuration should not be modified. + expect(config).toStrictEqual(starlightConfig); + }); +}); diff --git a/packages/starlight/__tests__/i18n-root-default-locale/vitest.config.ts b/packages/starlight/__tests__/i18n-root-default-locale/vitest.config.ts new file mode 100644 index 00000000..a677045a --- /dev/null +++ b/packages/starlight/__tests__/i18n-root-default-locale/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineVitestConfig } from '../test-config'; + +export default defineVitestConfig({ + title: 'i18n with root default locale', + defaultLocale: 'root', + locales: { + root: { label: 'French', lang: 'fr' }, + en: { label: 'English', lang: 'en-US' }, + ar: { label: 'Arabic', dir: 'rtl' }, + }, +}); diff --git a/packages/starlight/utils/i18n.ts b/packages/starlight/utils/i18n.ts index 4b23c0a5..c212c7bf 100644 --- a/packages/starlight/utils/i18n.ts +++ b/packages/starlight/utils/i18n.ts @@ -57,7 +57,10 @@ function getAstroI18nConfig(config: StarlightConfig): NonNullable { return { -- cgit