Fix i18n current locale (#12839)

Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>
This commit is contained in:
mtwilliams 2025-01-10 10:32:58 -05:00 committed by GitHub
parent 971cfe52ae
commit 57be3494e2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 28 additions and 4 deletions

View file

@ -0,0 +1,5 @@
---
'astro': patch
---
Fix Astro.currentLocale returning the incorrect locale when using fallback rewrites in SSR mode

View file

@ -605,8 +605,17 @@ export class RenderContext {
computedLocale = computeCurrentLocale(referer, locales, defaultLocale);
}
} else {
const pathname =
routeData.pathname && !isRoute404or500(routeData) ? routeData.pathname : url.pathname;
// For SSG we match the route naively, for dev we handle fallback on 404, for SSR we find route from fallbackRoutes
let pathname = routeData.pathname;
if (!routeData.pattern.test(url.pathname)) {
for (const fallbackRoute of routeData.fallbackRoutes) {
if (fallbackRoute.pattern.test(url.pathname)) {
pathname = fallbackRoute.pathname;
break;
}
}
}
pathname = pathname && !isRoute404or500(routeData) ? pathname : url.pathname;
computedLocale = computeCurrentLocale(pathname, locales, defaultLocale);
}

View file

@ -1,3 +1,6 @@
---
const locale = Astro.currentLocale
---
<html>
<head>
<title>Astro</title>
@ -7,6 +10,10 @@
</head>
<body>
Hello
<p>
locale - {locale}
</p>
</body>
</html>

View file

@ -1,6 +1,6 @@
import * as cheerio from 'cheerio';
import * as assert from 'node:assert/strict';
import { after, afterEach, before, describe, it } from 'node:test';
import * as cheerio from 'cheerio';
import testAdapter from './test-adapter.js';
import { loadFixture } from './test-utils.js';
@ -2014,13 +2014,13 @@ describe('Fallback rewrite dev server', () => {
locales: ['en', 'fr', 'es', 'it', 'pt'],
routing: {
prefixDefaultLocale: false,
fallbackType: 'rewrite',
},
fallback: {
fr: 'en',
it: 'en',
es: 'pt',
},
fallbackType: 'rewrite',
},
});
devServer = await fixture.startDevServer();
@ -2032,6 +2032,7 @@ describe('Fallback rewrite dev server', () => {
it('should correctly rewrite to en', async () => {
const html = await fixture.fetch('/fr').then((res) => res.text());
assert.match(html, /Hello/);
assert.match(html, /locale - fr/);
// assert.fail()
});
@ -2085,6 +2086,7 @@ describe('Fallback rewrite SSG', () => {
it('should correctly rewrite to en', async () => {
const html = await fixture.readFile('/fr/index.html');
assert.match(html, /Hello/);
assert.match(html, /locale - fr/);
// assert.fail()
});
@ -2138,6 +2140,7 @@ describe('Fallback rewrite SSR', () => {
const response = await app.render(request);
assert.equal(response.status, 200);
const html = await response.text();
assert.match(html, /locale - fr/);
assert.match(html, /Hello/);
});