Updating translations and adding a translation tracker
This commit is contained in:
11
i18n/Dockerfile
Normal file
11
i18n/Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
||||
FROM node:lts-alpine
|
||||
|
||||
WORKDIR /app
|
||||
COPY app/package*.json ./
|
||||
RUN npm install
|
||||
|
||||
COPY app/tsconfig*.json ./
|
||||
COPY app/src ./src
|
||||
EXPOSE 8100
|
||||
|
||||
CMD [ "npm", "--watch", "start" ]
|
||||
26
i18n/app/.gitignore
vendored
Normal file
26
i18n/app/.gitignore
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
# Logs
|
||||
|
||||
logs
|
||||
_.log
|
||||
npm-debug.log_
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
\*.local
|
||||
|
||||
# Editor directories and files
|
||||
|
||||
.vscode/_
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
_.suo
|
||||
_.ntvs_
|
||||
_.njsproj
|
||||
_.sln
|
||||
\*.sw?
|
||||
1164
i18n/app/package-lock.json
generated
Normal file
1164
i18n/app/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
25
i18n/app/package.json
Normal file
25
i18n/app/package.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "i18n Helper",
|
||||
"version": "0.1.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "ts-node src/index.ts",
|
||||
"build": "tsc",
|
||||
"serve": "node dist/index.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"type": "commonjs",
|
||||
"devDependencies": {
|
||||
"@types/express": "^5.0.1",
|
||||
"@types/node": "^22.15.3",
|
||||
"express": "^5.1.0",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"body-parser": "^2.2.0"
|
||||
}
|
||||
}
|
||||
49
i18n/app/src/index.ts
Normal file
49
i18n/app/src/index.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import express, { Request, Response } from 'express';
|
||||
import bodyParser from "body-parser";
|
||||
|
||||
import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'fs';
|
||||
|
||||
|
||||
|
||||
const app = express();
|
||||
app.use(bodyParser.json());
|
||||
const port = process.env.PORT || 8100;
|
||||
|
||||
app.post('/locales/add/:lng/:ns', (req: Request, res: Response) => {
|
||||
const keyPath = Object.keys(req.body)[0];
|
||||
|
||||
const basePath = "public/locales";
|
||||
const lgPath = `${basePath}/${req.params.lng}`;
|
||||
if (!existsSync(lgPath)) {
|
||||
mkdirSync(lgPath);
|
||||
}
|
||||
const filePath = `${lgPath}/common.json`;
|
||||
|
||||
let missingTrans;
|
||||
try {
|
||||
missingTrans = JSON.parse(readFileSync(filePath, 'utf8'));
|
||||
} catch(err) {
|
||||
missingTrans = JSON.parse("{}");
|
||||
}
|
||||
|
||||
let current = missingTrans
|
||||
const splitPath = keyPath.split(".");
|
||||
for (let i=0; i < splitPath.length; i++) {
|
||||
const key = splitPath[i];
|
||||
if (! current.hasOwnProperty(key)) {
|
||||
if (i + 1 == splitPath.length) {
|
||||
current[key] = "No translation";
|
||||
} else {
|
||||
current[key] = JSON.parse("{}");
|
||||
}
|
||||
}
|
||||
current = current[key];
|
||||
}
|
||||
writeFileSync(filePath, JSON.stringify(missingTrans, null, 2))
|
||||
|
||||
res.send("OK");
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server running at http://localhost:${port}`);
|
||||
});
|
||||
13
i18n/app/tsconfig.json
Normal file
13
i18n/app/tsconfig.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es6",
|
||||
"module": "commonjs",
|
||||
"outDir": "./dist",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"include": ["src/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
Reference in New Issue
Block a user