Skip to content

Commit

Permalink
fix(extract): when files are used, don't overwrite obsolete (#1964)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-cherel authored Oct 23, 2024
1 parent b8b4b19 commit e726b16
Show file tree
Hide file tree
Showing 6 changed files with 179 additions and 14 deletions.
2 changes: 1 addition & 1 deletion packages/cli/src/api/catalog/mergeCatalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export function mergeCatalog(
const obsoleteMessages = obsoleteKeys.map((key) => ({
[key]: {
...prevCatalog[key],
obsolete: !options.files,
...(!options.files && { obsolete: true }),
},
}))

Expand Down
53 changes: 53 additions & 0 deletions packages/cli/test/extract-partial-consistency/existing/en.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2023-03-15 10:00+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: en\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Plural-Forms: \n"

#. js-lingui-explicit-id
#: fixtures/file-a.ts:11
#~ msgid "custom.id"
#~ msgstr "This message has custom id"

#. js-lingui-explicit-id
#: fixtures/file-a.ts:22
#: fixtures/file-a.ts:23
msgid "addToCart"
msgstr "Add To Cart with change ignored"

#. this is a comment
#: fixtures/file-b.tsx:6
msgid "Hello this is JSX Translation"
msgstr "Hello this is JSX Translation"

#: fixtures/file-b.tsx:11
msgctxt "my context"
msgid "Hello this is JSX Translation"
msgstr "Hello this is JSX Translation"

#: fixtures/file-a.ts:4
msgid "Hello world"
msgstr "Hello world"

#: fixtures/file-a.ts:6
msgctxt "custom context"
msgid "Hello world"
msgstr "Hello world"

#: fixtures/file-a.ts:16
msgid "Message in descriptor"
msgstr "Message in descriptor"

#. js-lingui-explicit-id
#: fixtures/file-b.tsx:15
msgid "jsx.custom.id"
msgstr "This JSX element has custom id"
53 changes: 53 additions & 0 deletions packages/cli/test/extract-partial-consistency/expected/en.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2023-03-15 10:00+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: en\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Plural-Forms: \n"

#. js-lingui-explicit-id
#: fixtures/file-a.ts:11
#~ msgid "custom.id"
#~ msgstr "This message has custom id"

#. js-lingui-explicit-id
#: fixtures/file-a.ts:22
#: fixtures/file-a.ts:23
msgid "addToCart"
msgstr "Add To Cart with change ignored"

#. this is a comment
#: fixtures/file-b.tsx:6
msgid "Hello this is JSX Translation"
msgstr "Hello this is JSX Translation"

#: fixtures/file-b.tsx:11
msgctxt "my context"
msgid "Hello this is JSX Translation"
msgstr "Hello this is JSX Translation"

#: fixtures/file-a.ts:4
msgid "Hello world"
msgstr "Hello world"

#: fixtures/file-a.ts:6
msgctxt "custom context"
msgid "Hello world"
msgstr "Hello world"

#: fixtures/file-a.ts:16
msgid "Message in descriptor"
msgstr "Message in descriptor"

#. js-lingui-explicit-id
#: fixtures/file-b.tsx:15
msgid "jsx.custom.id"
msgstr "This JSX element has custom id"
23 changes: 23 additions & 0 deletions packages/cli/test/extract-partial-consistency/fixtures/file-a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { i18n } from "@lingui/core"
import { defineMessage, t } from "@lingui/macro"

const msg = t`Hello world`

const msg2 = t({
message: "Hello world",
context: "custom context",
})

const msg3 = null /* original translation commented to mark message obsolete *//*t({
message: "This message has custom id",
id: "custom.id",
})*/

const msgDescriptor = defineMessage({
message: "Message in descriptor",
})

i18n._(msgDescriptor)

i18n._("addToCart")
i18n._({id: "addToCart", message: "Add To Cart with change ignored"})
16 changes: 16 additions & 0 deletions packages/cli/test/extract-partial-consistency/fixtures/file-b.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Trans } from "@lingui/macro"
import React from "react"

export function MyComponent() {
return (
<Trans comment={"this is a comment"}>Hello this is JSX Translation</Trans>
)
}

export function MyComponent2() {
return <Trans context="my context">Hello this is JSX Translation</Trans>
}

export function MyComponent3() {
return <Trans id={"jsx.custom.id"}>This JSX element has custom id</Trans>
}
46 changes: 33 additions & 13 deletions packages/cli/test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import extractExperimentalCommand from "../src/lingui-extract-experimental"
import { command as compileCommand } from "../src/lingui-compile"
import fs from "fs/promises"
import os from "os"
import glob from "glob"
import nodepath from "path"
import { makeConfig } from "@lingui/conf"
import { listingToHumanReadable, readFsToJson } from "../src/tests"
Expand All @@ -22,13 +23,18 @@ async function prepare(caseFolderName: string) {

const actualPath = nodepath.join(rootDir, "actual")
const expectedPath = nodepath.join(rootDir, "expected")
const existingPath = nodepath.join(rootDir, "existing")

await fs.rm(actualPath, {
recursive: true,
force: true,
})

return { rootDir, actualPath, expectedPath }
if (glob.sync(existingPath).length === 1) {
await fs.cp(existingPath, actualPath, { recursive: true })
}

return { rootDir, actualPath, existingPath, expectedPath }
}

describe("E2E Extractor Test", () => {
Expand Down Expand Up @@ -174,12 +180,6 @@ describe("E2E Extractor Test", () => {
"extractor-experimental"
)

await fs.cp(
nodepath.join(rootDir, "existing"),
nodepath.join(rootDir, "actual"),
{ recursive: true }
)

await mockConsole(async (console) => {
const config = makeConfig({
rootDir: rootDir,
Expand Down Expand Up @@ -234,12 +234,6 @@ describe("E2E Extractor Test", () => {
"extractor-experimental-clean"
)

await fs.cp(
nodepath.join(rootDir, "existing"),
nodepath.join(rootDir, "actual"),
{ recursive: true }
)

await mockConsole(async (console) => {
const result = await extractExperimentalCommand(
makeConfig({
Expand Down Expand Up @@ -288,4 +282,30 @@ describe("E2E Extractor Test", () => {
compareFolders(actualPath, expectedPath)
})
})

it("should extract consistently with files argument", async () => {
const { rootDir, actualPath, expectedPath } = await prepare(
"extract-partial-consistency"
)

await extractCommand(
makeConfig({
rootDir: rootDir,
locales: ["en"],
sourceLocale: "en",
format: "po",
catalogs: [
{
path: "<rootDir>/actual/{locale}",
include: ["<rootDir>/fixtures"],
},
],
}),
{
files: [nodepath.join(rootDir, "fixtures", "file-b.tsx")],
}
)

compareFolders(actualPath, expectedPath)
})
})

0 comments on commit e726b16

Please sign in to comment.