diff --git a/.changeset/silent-buckets-retire.md b/.changeset/silent-buckets-retire.md new file mode 100644 index 000000000000..f682c97d786f --- /dev/null +++ b/.changeset/silent-buckets-retire.md @@ -0,0 +1,5 @@ +--- +"astro": patch +--- + +Fixes an issue where `astro:i18n` could not be used in framework components. diff --git a/packages/astro/src/i18n/vite-plugin-i18n.ts b/packages/astro/src/i18n/vite-plugin-i18n.ts index 856ce46a7415..241f218f5a02 100644 --- a/packages/astro/src/i18n/vite-plugin-i18n.ts +++ b/packages/astro/src/i18n/vite-plugin-i18n.ts @@ -4,8 +4,6 @@ import { AstroError } from '../core/errors/errors.js'; import { AstroErrorData } from '../core/errors/index.js'; const virtualModuleId = 'astro:i18n'; -const configId = 'astro-internal:i18n-config'; -const resolvedConfigId = `\0${configId}`; type AstroInternationalization = { settings: AstroSettings; @@ -13,8 +11,9 @@ type AstroInternationalization = { export interface I18nInternalConfig extends Pick, - NonNullable, - Pick {} + Pick { + i18n: AstroConfig['i18n']; + } export default function astroInternationalization({ settings, @@ -29,28 +28,19 @@ export default function astroInternationalization({ return { name: 'astro:i18n', enforce: 'pre', - async resolveId(id) { + config(config) { + const i18nConfig: I18nInternalConfig = { base, format, site, trailingSlash, i18n }; + return { + define: { + __ASTRO_INTERNAL_I18N_CONFIG__: JSON.stringify(i18nConfig) + } + } + }, + resolveId(id) { if (id === virtualModuleId) { if (i18n === undefined) throw new AstroError(AstroErrorData.i18nNotEnabled); return this.resolve('astro/virtual-modules/i18n.js'); } - if (id === configId) return resolvedConfigId; - }, - load(id) { - if (id === resolvedConfigId) { - const { defaultLocale, locales, routing, fallback } = i18n!; - const config: I18nInternalConfig = { - base, - format, - site, - trailingSlash, - defaultLocale, - locales, - routing, - fallback, - }; - return `export default ${JSON.stringify(config)};`; - } - }, + } }; } diff --git a/packages/astro/src/virtual-modules/i18n.ts b/packages/astro/src/virtual-modules/i18n.ts index d9d470431117..aff49a492dc0 100644 --- a/packages/astro/src/virtual-modules/i18n.ts +++ b/packages/astro/src/virtual-modules/i18n.ts @@ -1,10 +1,10 @@ import * as I18nInternals from '../i18n/index.js'; import type { I18nInternalConfig } from '../i18n/vite-plugin-i18n.js'; export { normalizeTheLocale, toCodes, toPaths } from '../i18n/index.js'; + // @ts-expect-error -import config from 'astro-internal:i18n-config'; -const { trailingSlash, format, site, defaultLocale, locales, routing } = - config as I18nInternalConfig; +const { trailingSlash, format, site, i18n } = __ASTRO_INTERNAL_I18N_CONFIG__ as I18nInternalConfig; +const { defaultLocale, locales, routing } = i18n!; const base = import.meta.env.BASE_URL; export type GetLocaleOptions = I18nInternals.GetLocaleOptions;