Skip to content

Commit

Permalink
Add translator scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
barshathakuri committed Mar 19, 2024
1 parent 427e74e commit af87cf8
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 2 deletions.
14 changes: 13 additions & 1 deletion .unimportedrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,19 @@
"#assets/content/operational_timeline_title.svg?react",
"#assets/content/operational_timeline_body.svg?react"
],
"ignoreUnused": ["@tinymce/tinymce-react", "@mapbox/mapbox-gl-draw"],
"ignoreUnused": [
"@tinymce/tinymce-react",
"@mapbox/mapbox-gl-draw",
"@apollo/client",
"@graphql-codegen/introspection",
"@graphql-codegen/typescript-operations",
"@togglecorp/re-map",
"@turf/bbox",
"@turf/buffer",
"graphql-request",
"sanitize-html",
"@sentry/react"
],
"extensions": [".ts", ".js", ".tsx", ".jsx"],
"aliases": {
"#assets/*": ["./src/assets/*"],
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@
"@graphql-codegen/typescript-operations": "^4.2.0",
"@ifrc-go/icons": "^1.3.1",
"@mapbox/mapbox-gl-draw": "^1.2.0",
"@sentry/react": "^7.81.1",
"@togglecorp/fujs": "^2.1.1",
"@togglecorp/re-map": "^0.2.0-beta-6",
"@turf/bbox": "^6.5.0",
"@turf/buffer": "^6.5.0",
"graphql": "^16.8.1",
"graphql-request": "^6.1.0",
"mapbox-gl": "^1.13.0",
"patch-package": "^8.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.11.1",
Expand Down Expand Up @@ -60,7 +62,6 @@
"fast-glob": "^3.3.0",
"happy-dom": "^9.18.3",
"openapi-typescript": "6.5.5",
"patch-package": "^7.0.0",
"postcss": "^8.3.0",
"postcss-nested": "^6.0.1",
"postcss-normalize": "^10.0.1",
Expand Down
File renamed without changes.
83 changes: 83 additions & 0 deletions scripts/translator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { isDefined, listToMap, mapToList } from '@togglecorp/fujs';
import fg from 'fast-glob';
import { readFile } from 'fs';
import { join } from 'path';
import { cwd, exit } from 'process';
import { promisify } from 'util';

const glob = fg.glob;

const readFilePromisify = promisify(readFile);

function getDuplicates(
list,
keySelector,
) {
if (!list) {
return undefined;
}
const counts = listToMap(
list,
keySelector,
(_, key, __, acc) => {
const value = acc[key];
return isDefined(value) ? value + 1 : 1;
},
);

return list
.filter((item) => counts[keySelector(item)] > 1)
.sort((foo, bar) => keySelector(foo).localeCompare(keySelector(bar)));
}

const currentDir = cwd();
const fullPath = join(currentDir, 'src/**/i18n.json');
console.info('Searching in', fullPath);

const files = await glob(fullPath, { ignore: ['node_modules'], absolute: true });
console.info(`Found ${files.length} i18n.json files.`);

const translationsPromise = files.map(async (file) => {
const fileDescriptor = await readFilePromisify(file);
const filename = `.${file.slice(currentDir.length)}`;
try {
return {
file: filename,
content: JSON.parse(fileDescriptor.toString()),
};
} catch (e) {
console.error(`Error while parsing JSON for ${filename}`);
exit(1);
}
});
const translations = await Promise.all(translationsPromise);

const strings = translations.flatMap((translation) => {
const { file, content } = translation;

return mapToList(
content.strings,
(item, key) => ({
file,
namespace: content.namespace,
key,
value: item,
}),
);
});

const namespaces = new Set(strings.map((item) => item.namespace));

console.info(`Found ${namespaces.size} namespaces.`);
console.info(`Found ${strings.length} strings.`);

const duplicates = getDuplicates(
strings,
(string) => `${string.namespace}:${string.key}`,
);

console.error(`Found ${duplicates.length} duplicated strings.`);
if (duplicates.length > 0) {
console.info(JSON.stringify(duplicates, null, 2));
exit(2);
}

0 comments on commit af87cf8

Please sign in to comment.