fix: locale handling for logger (#3391)
* fix(#3309): use system default locale * fix(#3309): use system default locale in create-astro * test: add locale regression tests * test: add i18n regression test
This commit is contained in:
parent
6cec1b8ef2
commit
cf8015eaa2
4 changed files with 45 additions and 24 deletions
6
.changeset/thirty-drinks-shout.md
Normal file
6
.changeset/thirty-drinks-shout.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
'astro': patch
|
||||
'create-astro': patch
|
||||
---
|
||||
|
||||
Fix [#3309](https://github.com/withastro/astro/issues/3309) default logger locale behavior.
|
|
@ -14,18 +14,16 @@ export interface LogOptions {
|
|||
level: LoggerLevel;
|
||||
}
|
||||
|
||||
function getLoggerLocale(): string {
|
||||
const defaultLocale = 'en-US';
|
||||
if (process.env.LANG) {
|
||||
const extractedLocale = process.env.LANG.split('.')[0].replace(/_/g, '-');
|
||||
// Check if language code is atleast two characters long (ie. en, es).
|
||||
// NOTE: if "c" locale is encountered, the default locale will be returned.
|
||||
if (extractedLocale.length < 2) return defaultLocale;
|
||||
else return extractedLocale.substring(0, 5);
|
||||
} else return defaultLocale;
|
||||
}
|
||||
|
||||
export const dateTimeFormat = new Intl.DateTimeFormat(getLoggerLocale(), {
|
||||
// Hey, locales are pretty complicated! Be careful modifying this logic...
|
||||
// If we throw at the top-level, international users can't use Astro.
|
||||
//
|
||||
// Using `[]` sets the default locale properly from the system!
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#parameters
|
||||
//
|
||||
// Here be the dragons we've slain:
|
||||
// https://github.com/withastro/astro/issues/2625
|
||||
// https://github.com/withastro/astro/issues/3309
|
||||
export const dateTimeFormat = new Intl.DateTimeFormat([], {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
|
|
|
@ -110,3 +110,21 @@ describe('astro cli', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('astro cli i18n', () => {
|
||||
const LOCALES = ['en_US', 'sv_SE', 'es_419.UTF-8', 'es_ES@euro', 'C'];
|
||||
LOCALES.forEach((locale) => {
|
||||
it(`astro does NOT throw on "${locale}" locales`, async () => {
|
||||
const projectRootURL = new URL('./fixtures/astro-basic/', import.meta.url);
|
||||
let error = null;
|
||||
try {
|
||||
const proc = cli('dev', '--root', fileURLToPath(projectRootURL), { env: { LANG: locale }});
|
||||
await parseCliDevStart(proc)
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
error = e.message;
|
||||
}
|
||||
expect(error).to.be.null;
|
||||
});
|
||||
})
|
||||
})
|
||||
|
|
|
@ -6,20 +6,19 @@ type ConsoleStream = Writable & {
|
|||
fd: 1 | 2;
|
||||
};
|
||||
|
||||
function getLoggerLocale(): string {
|
||||
const defaultLocale = 'en-US';
|
||||
if (process.env.LANG) {
|
||||
const extractedLocale = process.env.LANG.split('.')[0].replace(/_/g, '-');
|
||||
// Check if language code is atleast two characters long (ie. en, es).
|
||||
// NOTE: if "c" locale is encountered, the default locale will be returned.
|
||||
if (extractedLocale.length < 2) return defaultLocale;
|
||||
else return extractedLocale;
|
||||
} else return defaultLocale;
|
||||
}
|
||||
|
||||
const dt = new Intl.DateTimeFormat(getLoggerLocale(), {
|
||||
// Hey, locales are pretty complicated! Be careful modifying this logic...
|
||||
// If we throw at the top-level, international users can't use Astro.
|
||||
//
|
||||
// Using `[]` sets the default locale properly from the system!
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#parameters
|
||||
//
|
||||
// Here be the dragons we've slain:
|
||||
// https://github.com/withastro/astro/issues/2625
|
||||
// https://github.com/withastro/astro/issues/3309
|
||||
const dt = new Intl.DateTimeFormat([], {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
});
|
||||
|
||||
export const defaultLogDestination = new Writable({
|
||||
|
|
Loading…
Reference in a new issue