Skip to content

Commit

Permalink
fix: locale handling for logger (withastro#3391)
Browse files Browse the repository at this point in the history
* fix(withastro#3309): use system default locale

* fix(withastro#3309): use system default locale in create-astro

* test: add locale regression tests

* test: add i18n regression test
  • Loading branch information
natemoo-re authored May 18, 2022
1 parent e957dbd commit ec7001a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 12 deletions.
22 changes: 10 additions & 12 deletions src/core/logger/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
18 changes: 18 additions & 0 deletions test/cli.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
});
})
})

0 comments on commit ec7001a

Please sign in to comment.