From 8cae5e0e5a4ab0ab9406aa1683b60a4796c2d9f2 Mon Sep 17 00:00:00 2001 From: Folkert de Vries Date: Mon, 23 Dec 2024 09:37:37 +0100 Subject: [PATCH] fix: Allow empty translations for pseudo locale in compile --strict (#2129) --- packages/cli/src/lingui-compile.ts | 2 +- packages/cli/src/test/compile.test.ts | 39 ++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/lingui-compile.ts b/packages/cli/src/lingui-compile.ts index e9640f075..14fd4a173 100644 --- a/packages/cli/src/lingui-compile.ts +++ b/packages/cli/src/lingui-compile.ts @@ -45,7 +45,7 @@ export async function command( }, }) - if (!options.allowEmpty && missingMessages.length > 0) { + if (!options.allowEmpty && locale !== config.pseudoLocale && missingMessages.length > 0) { console.error( chalk.red( `Error: Failed to compile catalog for locale ${chalk.bold(locale)}!` diff --git a/packages/cli/src/test/compile.test.ts b/packages/cli/src/test/compile.test.ts index 4406301bc..a55e7e10f 100644 --- a/packages/cli/src/test/compile.test.ts +++ b/packages/cli/src/test/compile.test.ts @@ -8,10 +8,11 @@ describe("CLI Command: Compile", () => { // todo }) - function getConfig(rootDir: string) { + function getConfig(rootDir: string, pseudoLocale?: string) { return makeConfig({ locales: ["en", "pl"], sourceLocale: "en", + pseudoLocale: pseudoLocale, rootDir: rootDir, catalogs: [ { @@ -100,6 +101,42 @@ msgstr "" } ) + it( + "Should allow empty translation for pseudo locale", + async () => { + expect.assertions(4) + + const rootDir = await createFixtures({ + "/test": { + "en.po": ` +msgid "Hello World" +msgstr "Hello World" + `, + "pl.po": ` +msgid "Hello World" +msgstr "" + `, + }, + }) + + const config = getConfig(rootDir, 'pl') + + await mockConsole(async (console) => { + const result = await command(config, { + allowEmpty: false, + }) + const actualFiles = readFsToJson(config.rootDir) + + expect(actualFiles["pl.js"]).toBeTruthy() + expect(actualFiles["en.js"]).toBeTruthy() + + const log = getConsoleMockCalls(console.error) + expect(log).toBeUndefined() + expect(result).toBeTruthy() + }) + } + ) + it("Should show missing messages verbosely when verbose = true", async () => { expect.assertions(2) const rootDir = await createFixtures({