summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/thirty-drinks-shout.md6
-rw-r--r--packages/astro/src/core/logger/core.ts22
-rw-r--r--packages/astro/test/cli.test.js18
-rw-r--r--packages/create-astro/src/logger.ts23
4 files changed, 45 insertions, 24 deletions
diff --git a/.changeset/thirty-drinks-shout.md b/.changeset/thirty-drinks-shout.md
new file mode 100644
index 000000000..815e14dc1
--- /dev/null
+++ b/.changeset/thirty-drinks-shout.md
@@ -0,0 +1,6 @@
+---
+'astro': patch
+'create-astro': patch
+---
+
+Fix [#3309](https://github.com/withastro/astro/issues/3309) default logger locale behavior.
diff --git a/packages/astro/src/core/logger/core.ts b/packages/astro/src/core/logger/core.ts
index bfe5287f3..46045fd81 100644
--- a/packages/astro/src/core/logger/core.ts
+++ b/packages/astro/src/core/logger/core.ts
@@ -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',
diff --git a/packages/astro/test/cli.test.js b/packages/astro/test/cli.test.js
index 369c12103..480a530d0 100644
--- a/packages/astro/test/cli.test.js
+++ b/packages/astro/test/cli.test.js
@@ -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;
+ });
+ })
+})
diff --git a/packages/create-astro/src/logger.ts b/packages/create-astro/src/logger.ts
index 65f354632..96965e7ea 100644
--- a/packages/create-astro/src/logger.ts
+++ b/packages/create-astro/src/logger.ts
@@ -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({