Skip to content

Commit

Permalink
Fix i18n current locale (#12839)
Browse files Browse the repository at this point in the history
Co-authored-by: Emanuele Stoppa <[email protected]>
  • Loading branch information
mtwilliams-code and ematipico authored Jan 10, 2025
1 parent 971cfe5 commit 57be349
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 4 deletions.
5 changes: 5 additions & 0 deletions .changeset/happy-pianos-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fix Astro.currentLocale returning the incorrect locale when using fallback rewrites in SSR mode
13 changes: 11 additions & 2 deletions packages/astro/src/core/render-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
---
const locale = Astro.currentLocale
---
<html>
<head>
<title>Astro</title>
Expand All @@ -7,6 +10,10 @@
</head>
<body>
Hello
<p>

locale - {locale}
</p>
</body>
</html>

Expand Down
7 changes: 5 additions & 2 deletions packages/astro/test/i18n-routing.test.js
Original file line number Diff line number Diff line change
@@ -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';

Expand Down Expand Up @@ -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();
Expand All @@ -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()
});

Expand Down Expand Up @@ -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()
});

Expand Down Expand Up @@ -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/);
});

Expand Down

0 comments on commit 57be349

Please sign in to comment.