Skip to content

Commit 549c75c

Browse files
committed
feat(i18n): create-translation
1 parent 05599de commit 549c75c

File tree

51 files changed

+185
-21
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+185
-21
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#!/usr/bin/env ts-node-script
2+
import { mkdir, writeFile } from "fs/promises";
3+
import path from "node:path";
4+
import { dirname } from "path";
5+
import { getPackageFileContent, PackageSchema } from "../src";
6+
import { readXml } from "../src/package-xml";
7+
import { findCaptionsAndDescriptions, getWidgetXMLName, type Result } from "../src/widget-file-xml";
8+
async function main(): Promise<void> {
9+
console.log(`Creating translation i18n format...`);
10+
const path = process.cwd();
11+
12+
const raw = await getPackageFileContent(path);
13+
// To get better error output from zod use empty objects
14+
const target = {
15+
mxpackage: {},
16+
marketplace: {},
17+
repository: {},
18+
testProject: {},
19+
...raw
20+
};
21+
22+
// First, check common fields
23+
const info = PackageSchema.parse(target);
24+
25+
switch (info.mxpackage.type) {
26+
case "widget": {
27+
createTranslation(path);
28+
break;
29+
}
30+
case "module": {
31+
// TODO: ?
32+
break;
33+
}
34+
case "jsactions": {
35+
// TODO: ?
36+
break;
37+
}
38+
}
39+
}
40+
41+
export async function createTranslation(cwd: string) {
42+
const widgetXMLName = await getWidgetXMLName(cwd);
43+
if (widgetXMLName) {
44+
const obj = await readXml(path.join(cwd, "src", widgetXMLName));
45+
const res = findCaptionsAndDescriptions(obj);
46+
let fileName = "result";
47+
if (obj && typeof obj === "object" && obj["widget"] && obj["widget"]["@_id"]) {
48+
fileName = obj["widget"]["@_id"].toLowerCase();
49+
}
50+
writeResultToFile(res, `dist/locales/en-US/${fileName}.json`);
51+
writeResultToFile(res, `../../../dist/locales/en-US/${fileName}.json`);
52+
}
53+
}
54+
55+
// Function to ensure a directory exists
56+
async function ensureDirectoryExists(filePath: string): Promise<void> {
57+
const dir = dirname(filePath);
58+
await mkdir(dir, { recursive: true });
59+
}
60+
61+
// Function to write JSON result to a file
62+
async function writeResultToFile(result: Result, filename: string): Promise<void> {
63+
await ensureDirectoryExists(filename);
64+
const jsonContent = JSON.stringify(result, null, 2);
65+
await writeFile(filename, jsonContent, "utf-8");
66+
console.log(`JSON result has been written to ${filename}`);
67+
}
68+
69+
main().catch(e => {
70+
console.error(e);
71+
process.exit(1);
72+
});

automation/utils/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"rui-publish-marketplace": "bin/rui-publish-marketplace.ts",
1212
"rui-update-changelog-module": "bin/rui-update-changelog-module.ts",
1313
"rui-update-changelog-widget": "bin/rui-update-changelog-widget.ts",
14-
"rui-verify-package-format": "bin/rui-verify-package-format.ts"
14+
"rui-verify-package-format": "bin/rui-verify-package-format.ts",
15+
"rui-create-translation": "bin/rui-create-translation.ts"
1516
},
1617
"scripts": {
1718
"start": "tsc --watch",
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { readPackageXml } from "./package-xml";
2+
export interface Result {
3+
[key: string]: string;
4+
}
5+
6+
export async function getWidgetXMLName(cwd: string): Promise<string | undefined> {
7+
try {
8+
const packageXml = (await readPackageXml(cwd)) as {
9+
package?: {
10+
clientModule?: {
11+
widgetFiles: any;
12+
};
13+
};
14+
};
15+
return packageXml?.package?.clientModule?.widgetFiles.widgetFile["@_path"];
16+
} catch {
17+
return undefined;
18+
}
19+
}
20+
21+
// Function to recursively find all captions and descriptions
22+
export function findCaptionsAndDescriptions(obj: any, result: Result = {}): Result {
23+
for (const key in obj) {
24+
if (typeof obj[key] === "object") {
25+
findCaptionsAndDescriptions(obj[key], result);
26+
} else if (obj[key].trim() !== "") {
27+
if (
28+
key.includes("@_caption") ||
29+
key.toLowerCase().includes("caption") ||
30+
key.toLowerCase().includes("description")
31+
) {
32+
if (!result[obj[key]]) {
33+
result[obj[key]] = obj[key];
34+
}
35+
}
36+
}
37+
}
38+
return result;
39+
}

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"build": "turbo run build",
1414
"release": "turbo run release",
1515
"create-gh-release": "turbo run create-gh-release --concurrency 1",
16+
"create-translation": "turbo run create-translation",
1617
"publish-marketplace": "turbo run publish-marketplace",
1718
"version": "pnpm --filter @mendix/automation-utils run version",
1819
"changelog": "pnpm --filter @mendix/automation-utils run changelog"

packages/pluggableWidgets/accessibility-helper-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"lint": "eslint --ext .jsx,.js,.ts,.tsx src/",
3434
"release": "pluggable-widgets-tools release:web",
3535
"create-gh-release": "rui-create-gh-release",
36+
"create-translation": "rui-create-translation",
3637
"publish-marketplace": "rui-publish-marketplace",
3738
"verify": "rui-verify-package-format",
3839
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/accordion-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "pluggable-widgets-tools release:web",
3636
"create-gh-release": "rui-create-gh-release",
37+
"create-translation": "rui-create-translation",
3738
"publish-marketplace": "rui-publish-marketplace",
3839
"verify": "rui-verify-package-format",
3940
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/area-chart-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "pluggable-widgets-tools release:web",
3636
"verify": "rui-verify-package-format",
37-
"update-changelog": "rui-update-changelog-widget"
37+
"update-changelog": "rui-update-changelog-widget",
38+
"create-translation": "rui-create-translation"
3839
},
3940
"devDependencies": {
4041
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/badge-button-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "cross-env MPKOUTPUT=BadgeButton.mpk pluggable-widgets-tools release:web",
3636
"create-gh-release": "rui-create-gh-release",
37+
"create-translation": "rui-create-translation",
3738
"publish-marketplace": "rui-publish-marketplace",
3839
"verify": "rui-verify-package-format",
3940
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/badge-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"e2edev": "run-e2e dev --with-preps",
3737
"release": "cross-env MPKOUTPUT=Badge.mpk pluggable-widgets-tools release:web",
3838
"create-gh-release": "rui-create-gh-release",
39+
"create-translation": "rui-create-translation",
3940
"publish-marketplace": "rui-publish-marketplace",
4041
"verify": "rui-verify-package-format",
4142
"update-changelog": "rui-update-changelog-widget"

packages/pluggableWidgets/bar-chart-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "pluggable-widgets-tools release:web",
3636
"verify": "rui-verify-package-format",
37-
"update-changelog": "rui-update-changelog-widget"
37+
"update-changelog": "rui-update-changelog-widget",
38+
"create-translation": "rui-create-translation"
3839
},
3940
"devDependencies": {
4041
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/barcode-scanner-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"e2edev": "run-e2e dev --with-preps",
3737
"release": "pluggable-widgets-tools release:web",
3838
"create-gh-release": "rui-create-gh-release",
39+
"create-translation": "rui-create-translation",
3940
"publish-marketplace": "rui-publish-marketplace",
4041
"verify": "rui-verify-package-format",
4142
"update-changelog": "rui-update-changelog-widget"

packages/pluggableWidgets/bubble-chart-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "pluggable-widgets-tools release:web",
3636
"verify": "rui-verify-package-format",
37-
"update-changelog": "rui-update-changelog-widget"
37+
"update-changelog": "rui-update-changelog-widget",
38+
"create-translation": "rui-create-translation"
3839
},
3940
"devDependencies": {
4041
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/carousel-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"test": "jest --projects jest.config.js",
3434
"release": "cross-env MPKOUTPUT=Carousel.mpk pluggable-widgets-tools release:web",
3535
"create-gh-release": "rui-create-gh-release",
36+
"create-translation": "rui-create-translation",
3637
"publish-marketplace": "rui-publish-marketplace",
3738
"verify": "rui-verify-package-format",
3839
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/chart-playground-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"start": "pluggable-widgets-tools start:server",
3737
"test": "pluggable-widgets-tools test:unit:web",
3838
"update-changelog": "rui-update-changelog-widget",
39-
"verify": "rui-verify-package-format"
39+
"verify": "rui-verify-package-format",
40+
"create-translation": "rui-create-translation"
4041
},
4142
"devDependencies": {
4243
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/color-picker-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"test": "pluggable-widgets-tools test:unit:web",
3434
"release": "cross-env MPKOUTPUT=ColorPicker.mpk pluggable-widgets-tools release:web",
3535
"create-gh-release": "rui-create-gh-release",
36+
"create-translation": "rui-create-translation",
3637
"publish-marketplace": "rui-publish-marketplace",
3738
"verify": "rui-verify-package-format",
3839
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/column-chart-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"verify": "rui-verify-package-format",
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
39-
"e2edev": "run-e2e dev --with-preps"
39+
"e2edev": "run-e2e dev --with-preps",
40+
"create-translation": "rui-create-translation"
4041
},
4142
"devDependencies": {
4243
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/combobox-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"e2edev": "run-e2e dev --with-preps",
4040
"release": "pluggable-widgets-tools release:web",
4141
"create-gh-release": "rui-create-gh-release",
42+
"create-translation": "rui-create-translation",
4243
"publish-marketplace": "rui-publish-marketplace",
4344
"verify": "rui-verify-package-format",
4445
"update-changelog": "rui-update-changelog-widget"

packages/pluggableWidgets/datagrid-date-filter-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
3939
"e2edev": "run-e2e dev --with-preps",
40-
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps"
40+
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"@mendix/widget-plugin-external-events": "workspace:*",

packages/pluggableWidgets/datagrid-dropdown-filter-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
3939
"e2edev": "run-e2e dev --with-preps",
40-
"e2e-update-project": "pnpm -w exec turbo run build:module --filter data-widgets --force"
40+
"e2e-update-project": "pnpm -w exec turbo run build:module --filter data-widgets --force",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"@mendix/widget-plugin-external-events": "workspace:*",

packages/pluggableWidgets/datagrid-number-filter-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
3939
"e2edev": "run-e2e dev --with-preps",
40-
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps"
40+
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"@mendix/widget-plugin-external-events": "workspace:*",

packages/pluggableWidgets/datagrid-text-filter-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
3939
"e2edev": "run-e2e dev --with-preps",
40-
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps"
40+
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"@mendix/widget-plugin-component-kit": "workspace:*",

packages/pluggableWidgets/datagrid-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"release": "pluggable-widgets-tools release:ts",
3838
"verify": "rui-verify-package-format",
3939
"update-changelog": "rui-update-changelog-widget",
40-
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps"
40+
"e2e-update-project": "pnpm --filter data-widgets run build:include-deps",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"@mendix/widget-plugin-filtering": "workspace:*",

packages/pluggableWidgets/dropdown-sort-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
3939
"e2edev": "run-e2e dev --with-preps",
40-
"e2e-update-project": "pnpm -w exec turbo run build:module --filter data-widgets --force"
40+
"e2e-update-project": "pnpm -w exec turbo run build:module --filter data-widgets --force",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"@mendix/widget-plugin-filtering": "workspace:*"

packages/pluggableWidgets/events-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"e2edev": "run-e2e dev --with-preps",
4040
"release": "pluggable-widgets-tools release:web",
4141
"create-gh-release": "rui-create-gh-release",
42+
"create-translation": "rui-create-translation",
4243
"publish-marketplace": "rui-publish-marketplace",
4344
"verify": "rui-verify-package-format",
4445
"update-changelog": "rui-update-changelog-widget"

packages/pluggableWidgets/fieldset-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "pluggable-widgets-tools release:web",
3636
"create-gh-release": "rui-create-gh-release",
37+
"create-translation": "rui-create-translation",
3738
"publish-marketplace": "rui-publish-marketplace",
3839
"verify": "rui-verify-package-format",
3940
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/fileuploader-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"test": "pluggable-widgets-tools test:unit:web",
3838
"release": "pluggable-widgets-tools release:web",
3939
"verify": "rui-verify-package-format",
40-
"update-changelog": "rui-update-changelog-widget"
40+
"update-changelog": "rui-update-changelog-widget",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"classnames": "^2.2.6",

packages/pluggableWidgets/gallery-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
3939
"e2edev": "run-e2e dev --with-preps",
40-
"e2e-update-project": "pnpm -w exec turbo run build:module --filter data-widgets --force"
40+
"e2e-update-project": "pnpm -w exec turbo run build:module --filter data-widgets --force",
41+
"create-translation": "rui-create-translation"
4142
},
4243
"dependencies": {
4344
"@mendix/widget-plugin-external-events": "workspace:*",

packages/pluggableWidgets/google-tag-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"verify": "rui-verify-package-format",
4040
"update-changelog": "rui-update-changelog-widget",
4141
"create-gh-release": "rui-create-gh-release",
42+
"create-translation": "rui-create-translation",
4243
"publish-marketplace": "rui-publish-marketplace"
4344
},
4445
"devDependencies": {

packages/pluggableWidgets/heatmap-chart-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"verify": "rui-verify-package-format",
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
39-
"e2edev": "run-e2e dev --with-preps"
39+
"e2edev": "run-e2e dev --with-preps",
40+
"create-translation": "rui-create-translation"
4041
},
4142
"devDependencies": {
4243
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/html-element-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"start": "pluggable-widgets-tools start:server",
3737
"test": "pluggable-widgets-tools test:unit:web",
3838
"update-changelog": "rui-update-changelog-widget",
39-
"verify": "rui-verify-package-format"
39+
"verify": "rui-verify-package-format",
40+
"create-translation": "rui-create-translation"
4041
},
4142
"devDependencies": {
4243
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/image-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "pluggable-widgets-tools release:web",
3636
"create-gh-release": "rui-create-gh-release",
37+
"create-translation": "rui-create-translation",
3738
"publish-marketplace": "rui-publish-marketplace",
3839
"verify": "rui-verify-package-format",
3940
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/language-selector-web/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"test": "pluggable-widgets-tools test:unit:web",
3535
"release": "pluggable-widgets-tools release:web",
3636
"create-gh-release": "rui-create-gh-release",
37+
"create-translation": "rui-create-translation",
3738
"publish-marketplace": "rui-publish-marketplace",
3839
"verify": "rui-verify-package-format",
3940
"update-changelog": "rui-update-changelog-widget",

packages/pluggableWidgets/line-chart-web/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"verify": "rui-verify-package-format",
3737
"update-changelog": "rui-update-changelog-widget",
3838
"e2e": "run-e2e ci",
39-
"e2edev": "run-e2e dev --with-preps"
39+
"e2edev": "run-e2e dev --with-preps",
40+
"create-translation": "rui-create-translation"
4041
},
4142
"devDependencies": {
4243
"@mendix/automation-utils": "workspace:*",

0 commit comments

Comments
 (0)