/opt/canhelp
NameSizeModeActions
.git/-0755rm
.github/-0755rm
apps/-0755rm
backups/-0755rm
logs/-0755rm
node_modules/-0755rm
packages/-0755rm
scripts/-0755rm
uploads/-0755rm
.env37350644editdlrm
.env.example19780644editdlrm
.gitignore10710644editdlrm
CLAUDE.md34820644editdlrm
deploy.log5680644editdlrm
DEPLOY.md38710644editdlrm
docker-compose.yml8350644editdlrm
ecosystem.config.js9830644editdlrm
find_missing_keys.js9900644editdlrm
package-lock.json2015120644editdlrm
package.json13950644editdlrm
ru_keys.txt287680644editdlrm
STACK.md37450644editdlrm
turbo.json4620644editdlrm
uk_keys.txt287680644editdlrm
Edit: /opt/canhelp/find_missing_keys.js (990B)
const fs = require('fs'); const content = fs.readFileSync('apps/web/src/lib/translations.ts', 'utf8'); function extractKeys(localeStr) { const keys = []; const regex = /'([^']+)':/g; let m; while ((m = regex.exec(localeStr)) !== null) { keys.push(m[1]); } return keys; } const ruStartStr = ' ru: {'; const ukStartStr = ' uk: {'; const ruIdx = content.indexOf(ruStartStr); const ukIdx = content.indexOf(ukStartStr); const lastBrace = content.lastIndexOf(' },'); if (ruIdx === -1 || ukIdx === -1) { console.error('Indices not found'); process.exit(1); } const ruBlock = content.slice(ruIdx, ukIdx); const ukBlock = content.slice(ukIdx, lastBrace + 4); const ruKeys = extractKeys(ruBlock); const ukKeys = new Set(extractKeys(ukBlock)); console.log('RU Keys count:', ruKeys.length); console.log('UK Keys count:', ukKeys.size); const missing = ruKeys.filter(k => !ukKeys.has(k)); console.log('Missing in uk:', missing.length); console.log(missing.join('\n'));