i18ntk
Version:
š The fastest i18n toolkit with 97% performance boost! Zero-dependency, enterprise-grade internationalization for React, Vue, Angular, Python, Java, PHP & more. Features PIN protection, auto framework detection, 7+ UI languages, and comprehensive transla
858 lines (832 loc) ⢠18.2 kB
JavaScript
/**
* Missing Key Validator
* Validates presence of all required keys across all supported languages
*/
const fs = require('fs');
const path = require('path');
class MissingKeyValidator {
constructor(supportedLanguages = ['en', 'es', 'fr', 'de', 'ja', 'ru', 'zh']) {
this.supportedLanguages = supportedLanguages;
this.projectRoot = path.resolve(__dirname, '..');
this.requiredKeys = this.loadRequiredKeys();
}
loadRequiredKeys() {
// Define required keys for the toolkit
return [
// Core UI keys
'welcome',
'error',
'success',
'warning',
'info',
'loading',
'processing',
'completed',
'cancel',
'confirm',
'save',
'delete',
'edit',
'add',
'remove',
'update',
'create',
'close',
'open',
'search',
'filter',
'sort',
'export',
'import',
'backup',
'restore',
'settings',
'configuration',
'language',
'locale',
'translation',
'key',
'value',
'placeholder',
'validation',
'format',
'type',
'required',
'optional',
'default',
'description',
'help',
'documentation',
'support',
'contact',
'about',
'version',
'license',
'copyright',
'privacy',
'terms',
'security',
'authentication',
'authorization',
'login',
'logout',
'register',
'password',
'username',
'email',
'profile',
'account',
'dashboard',
'overview',
'summary',
'details',
'report',
'statistics',
'analytics',
'performance',
'metrics',
'logs',
'history',
'activity',
'notification',
'alert',
'message',
'feedback',
'review',
'rating',
'score',
'progress',
'status',
'state',
'mode',
'view',
'list',
'grid',
'table',
'card',
'tree',
'graph',
'chart',
'diagram',
'image',
'file',
'folder',
'directory',
'path',
'url',
'link',
'button',
'menu',
'tab',
'panel',
'window',
'dialog',
'modal',
'popup',
'tooltip',
'hint',
'guide',
'tutorial',
'walkthrough',
'demo',
'example',
'sample',
'template',
'theme',
'style',
'color',
'font',
'size',
'layout',
'responsive',
'mobile',
'tablet',
'desktop',
'browser',
'device',
'screen',
'resolution',
'orientation',
'accessibility',
'aria',
'keyboard',
'screen-reader',
'contrast',
'zoom',
'font-size',
'high-contrast',
'dark-mode',
'light-mode',
'auto-mode',
'sync',
'async',
'promise',
'callback',
'event',
'listener',
'handler',
'function',
'method',
'class',
'object',
'array',
'string',
'number',
'boolean',
'date',
'time',
'duration',
'interval',
'timeout',
'delay',
'throttle',
'debounce',
'cache',
'storage',
'memory',
'database',
'api',
'endpoint',
'request',
'response',
'status-code',
'header',
'body',
'payload',
'parameter',
'query',
'filter',
'pagination',
'limit',
'offset',
'cursor',
'sorting',
'ordering',
'direction',
'ascending',
'descending',
'grouping',
'aggregation',
'join',
'relation',
'association',
'foreign-key',
'primary-key',
'index',
'constraint',
'rule',
'trigger',
'procedure',
'function',
'view',
'materialized-view',
'sequence',
'schema',
'migration',
'seed',
'fixture',
'mock',
'stub',
'spy',
'test',
'spec',
'assertion',
'expectation',
'coverage',
'report',
'summary',
'detail',
'trace',
'debug',
'info',
'warn',
'error',
'fatal',
'critical',
'emergency',
'alert',
'notice',
'verbose',
'silent',
'quiet',
'normal',
'loud',
'minimal',
'full',
'complete',
'partial',
'incremental',
'delta',
'diff',
'patch',
'merge',
'conflict',
'resolution',
'strategy',
'algorithm',
'heuristic',
'optimization',
'efficiency',
'speed',
'performance',
'benchmark',
'profiling',
'monitoring',
'observability',
'telemetry',
'tracing',
'metrics',
'instrumentation',
'alerting',
'notification',
'escalation',
'incident',
'response',
'recovery',
'rollback',
'retry',
'circuit-breaker',
'timeout',
'deadline',
'graceful',
'degradation',
'fallback',
'backup',
'redundancy',
'replication',
'sharding',
'partitioning',
'distribution',
'load-balancing',
'scaling',
'horizontal',
'vertical',
'elastic',
'auto-scaling',
'burst',
'capacity',
'throughput',
'latency',
'bandwidth',
'utilization',
'saturation',
'bottleneck',
'contention',
'starvation',
'deadlock',
'livelock',
'race-condition',
'consistency',
'availability',
'partition-tolerance',
'cap-theorem',
'acid',
'base',
'transaction',
'isolation',
'serializable',
'repeatable-read',
'read-committed',
'read-uncommitted',
'durability',
'atomicity',
'rollback',
'commit',
'checkpoint',
'savepoint',
'compensation',
'saga',
'workflow',
'orchestration',
'choreography',
'state-machine',
'event-sourcing',
'cqrs',
'eventual-consistency',
'idempotency',
'deduplication',
'exactly-once',
'at-least-once',
'at-most-once',
'guaranteed-delivery',
'message-queue',
'pub-sub',
'topic',
'subscription',
'consumer',
'producer',
'broker',
'exchange',
'routing',
'binding',
'queue',
'dead-letter',
'retry-queue',
'backpressure',
'flow-control',
'throttling',
'rate-limiting',
'quota',
'fairness',
'priority',
'starvation',
'aging',
'token-bucket',
'leaky-bucket',
'sliding-window',
'fixed-window',
'adaptive',
'machine-learning',
'ai',
'ml',
'deep-learning',
'neural-network',
'model',
'training',
'inference',
'prediction',
'classification',
'regression',
'clustering',
'anomaly-detection',
'recommendation',
'personalization',
'optimization',
'genetic-algorithm',
'evolutionary',
'swarm-intelligence',
'reinforcement-learning',
'q-learning',
'policy',
'reward',
'penalty',
'exploration',
'exploitation',
'multi-armed-bandit',
'contextual',
'federated-learning',
'privacy-preserving',
'differential-privacy',
'homomorphic-encryption',
'zero-knowledge',
'secure-multi-party',
'threshold-cryptography',
'distributed-ledger',
'blockchain',
'consensus',
'proof-of-work',
'proof-of-stake',
'byzantine-fault-tolerance',
'smart-contract',
'oracle',
'decentralized',
'web3',
'nft',
'token',
'cryptocurrency',
'stable-coin',
'defi',
'dao',
'metaverse',
'ar',
'vr',
'xr',
'mixed-reality',
'spatial-computing',
'digital-twin',
'iot',
'edge-computing',
'fog-computing',
'cloud-native',
'microservices',
'service-mesh',
'api-gateway',
'service-discovery',
'circuit-breaker',
'rate-limiter',
'load-balancer',
'proxy',
'reverse-proxy',
'forward-proxy',
'cdn',
'cache',
'redis',
'memcached',
'elasticsearch',
'mongodb',
'postgresql',
'mysql',
'sqlite',
'cassandra',
'dynamodb',
'firestore',
'cosmosdb',
'neo4j',
'arangodb',
'couchbase',
'influxdb',
'prometheus',
'grafana',
'jaeger',
'zipkin',
'newrelic',
'datadog',
'splunk',
'elk-stack',
'fluentd',
'logstash',
'kibana',
'beats',
'filebeat',
'metricbeat',
'heartbeat',
'packetbeat',
'auditbeat',
'functionbeat',
'journalbeat',
'community',
'contribute',
'contribution',
'guidelines',
'code-of-conduct',
'license',
'copyright',
'attribution',
'acknowledgment',
'citation',
'reference',
'bibliography',
'changelog',
'release-notes',
'roadmap',
'milestone',
'backlog',
'issue',
'bug',
'feature',
'enhancement',
'improvement',
'optimization',
'refactor',
'cleanup',
'technical-debt',
'legacy',
'deprecated',
'obsolete',
'end-of-life',
'sunset',
'migration',
'upgrade',
'downgrade',
'rollback',
'compatibility',
'interoperability',
'standard',
'specification',
'rfc',
'draft',
'proposal',
'review',
'approval',
'rejection',
'feedback',
'iteration',
'incremental',
'agile',
'scrum',
'kanban',
'lean',
'devops',
'ci-cd',
'continuous-integration',
'continuous-deployment',
'continuous-delivery',
'git',
'github',
'gitlab',
'bitbucket',
'svn',
'mercurial',
'version-control',
'branch',
'merge',
'rebase',
'cherry-pick',
'stash',
'tag',
'release',
'hotfix',
'feature-branch',
'main-branch',
'develop-branch',
'staging',
'production',
'environment',
'configuration',
'parameter',
'variable',
'constant',
'macro',
'template',
'snippet',
'boilerplate',
'scaffold',
'generator',
'cli',
'command-line',
'terminal',
'shell',
'bash',
'zsh',
'fish',
'powershell',
'cmd',
'prompt',
'interactive',
'non-interactive',
'batch',
'script',
'automation',
'orchestration',
'workflow',
'pipeline',
'stage',
'step',
'task',
'job',
'build',
'test',
'deploy',
'monitor',
'alert',
'notify',
'report',
'dashboard',
'kpi',
'metric',
'sla',
'slo',
'slis',
'availability',
'reliability',
'scalability',
'performance',
'efficiency',
'effectiveness',
'quality',
'security',
'compliance',
'governance',
'audit',
'traceability',
'accountability',
'transparency',
'documentation',
'training',
'onboarding',
'support',
'maintenance',
'operations',
'runbook',
'playbook',
'procedure',
'process',
'policy',
'standard',
'best-practice',
'guideline',
'checklist',
'template',
'form',
'survey',
'questionnaire',
'feedback',
'rating',
'review',
'approval',
'sign-off',
'acceptance',
'criteria',
'definition-of-done',
'definition-of-ready',
'ready',
'done',
'blocked',
'impediment',
'risk',
'issue',
'dependency',
'constraint',
'assumption',
'prerequisite',
'requirement',
'specification',
'design',
'architecture',
'diagram',
'model',
'prototype',
'mockup',
'wireframe',
'storyboard',
'user-story',
'use-case',
'scenario',
'persona',
'journey',
'flow',
'process',
'workflow',
'state',
'transition',
'action',
'event',
'trigger',
'condition',
'rule',
'logic',
'algorithm',
'function',
'method',
'procedure',
'operation',
'calculation',
'computation',
'transformation',
'conversion',
'validation',
'verification',
'sanitization',
'normalization',
'standardization',
'optimization',
'compression',
'encryption',
'decryption',
'hashing',
'encoding',
'decoding',
'serialization',
'deserialization',
'parsing',
'formatting',
'rendering',
'display',
'presentation',
'visualization',
'interaction',
'navigation',
'usability',
'accessibility',
'responsiveness',
'performance',
'efficiency',
'quality',
'reliability',
'maintainability',
'scalability',
'security',
'privacy',
'compliance',
'governance',
'audit',
'monitoring',
'alerting',
'reporting',
'analytics',
'insights',
'intelligence',
'learning',
'improvement',
'evolution',
'adaptation',
'innovation',
'transformation',
'digitalization',
'automation',
'optimization',
'modernization',
'upgrade',
'migration',
'transition',
'change',
'management'
];
}
async validateAllKeys() {
console.log('š Validating missing keys across all languages...');
const missingKeys = {};
for (const language of this.supportedLanguages) {
const languageMissing = await this.validateLanguageKeys(language);
if (languageMissing.length > 0) {
missingKeys[language] = languageMissing;
}
}
return missingKeys;
}
async validateLanguageKeys(language) {
const localePath = path.join(this.projectRoot, 'ui-locales', `${language}.json`);
if (!fs.existsSync(localePath)) {
return this.requiredKeys; // All keys missing if file doesn't exist
}
try {
const localeData = JSON.parse(fs.readFileSync(localePath, 'utf8'));
const existingKeys = Object.keys(localeData);
return this.requiredKeys.filter(key => !existingKeys.includes(key));
} catch (error) {
console.error(`Error reading ${language}.json:`, error.message);
return this.requiredKeys;
}
}
async generateMissingKeysReport() {
const missingKeys = await this.validateAllKeys();
const report = {
timestamp: new Date().toISOString(),
summary: {
totalLanguages: this.supportedLanguages.length,
totalRequiredKeys: this.requiredKeys.length,
languagesWithMissingKeys: Object.keys(missingKeys).length,
totalMissingKeys: Object.values(missingKeys).reduce((sum, keys) => sum + keys.length, 0)
},
details: missingKeys
};
const reportPath = path.join(__dirname, 'missing-keys-report.json');
fs.writeFileSync(reportPath, JSON.stringify(report, null, 2));
console.log('\nš Missing Keys Report:');
console.log(`Total Languages: ${report.summary.totalLanguages}`);
console.log(`Total Required Keys: ${report.summary.totalRequiredKeys}`);
console.log(`Languages with Missing Keys: ${report.summary.languagesWithMissingKeys}`);
console.log(`Total Missing Keys: ${report.summary.totalMissingKeys}`);
if (report.summary.totalMissingKeys > 0) {
console.log('\nā Missing keys by language:');
Object.entries(missingKeys).forEach(([lang, keys]) => {
console.log(`${lang}: ${keys.length} keys missing`);
});
} else {
console.log('\nā
All keys present in all languages!');
}
console.log(`Report saved to: ${reportPath}`);
return report;
}
async generateTranslationTemplate() {
const template = {};
this.requiredKeys.forEach(key => {
template[key] = key.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
});
const templatePath = path.join(__dirname, 'translation-template.json');
fs.writeFileSync(templatePath, JSON.stringify(template, null, 2));
console.log(`Translation template saved to: ${templatePath}`);
return template;
}
}
// CLI execution
if (require.main === module) {
const validator = new MissingKeyValidator();
if (process.argv.includes('--template')) {
validator.generateTranslationTemplate();
} else {
validator.generateMissingKeysReport();
}
}
module.exports = MissingKeyValidator;