diff --git a/.changeset/large-bananas-beg.md b/.changeset/large-bananas-beg.md new file mode 100644 index 0000000000..0e22d385a6 --- /dev/null +++ b/.changeset/large-bananas-beg.md @@ -0,0 +1,5 @@ +--- +'@astrojs/starlight': patch +--- + +Fixes an i18n configuration issue for multilingual sites when using Astro’s `i18n` config with `prefixDefaultLocale` set to `false`. diff --git a/packages/starlight/__tests__/basics/i18n.test.ts b/packages/starlight/__tests__/basics/i18n.test.ts index 527783b9a0..32dd299aae 100644 --- a/packages/starlight/__tests__/basics/i18n.test.ts +++ b/packages/starlight/__tests__/basics/i18n.test.ts @@ -162,7 +162,7 @@ describe('processI18nConfig', () => { locales: ['en', { codes: ['fr'], path: 'french' }], }, expected: { - defaultLocale: { label: 'English', lang: 'en', dir: 'ltr', locale: 'en' }, + defaultLocale: { label: 'English', lang: 'en', dir: 'ltr', locale: undefined }, locales: { root: { label: 'English', lang: 'en', dir: 'ltr' }, french: { label: 'Français', lang: 'fr', dir: 'ltr' }, @@ -180,7 +180,7 @@ describe('processI18nConfig', () => { routing: { prefixDefaultLocale: false }, }, expected: { - defaultLocale: { label: 'فارسی', lang: 'fa', dir: 'rtl', locale: 'fa' }, + defaultLocale: { label: 'فارسی', lang: 'fa', dir: 'rtl', locale: undefined }, locales: { root: { label: 'فارسی', lang: 'fa', dir: 'rtl' }, de: { label: 'Deutsch', lang: 'de', dir: 'ltr' }, diff --git a/packages/starlight/utils/i18n.ts b/packages/starlight/utils/i18n.ts index 8cba4f5a2b..ce07b1cc4d 100644 --- a/packages/starlight/utils/i18n.ts +++ b/packages/starlight/utils/i18n.ts @@ -118,11 +118,12 @@ function getStarlightI18nConfig( locales, defaultLocale: { ...inferStarlightLocaleFromAstroLocale(defaultAstroLocale), - locale: isMonolingualWithRootLocale - ? undefined - : isAstroLocaleExtendedConfig(defaultAstroLocale) - ? defaultAstroLocale.codes[0] - : defaultAstroLocale, + locale: + isMonolingualWithRootLocale || (isMultilingual && !prefixDefaultLocale) + ? undefined + : isAstroLocaleExtendedConfig(defaultAstroLocale) + ? defaultAstroLocale.codes[0] + : defaultAstroLocale, }, }; }