transcripto-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +576 -0
- package/dist/cli/generate.d.ts +2 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +416 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +43 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +81 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/report.d.ts +2 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +137 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.d.ts +2 -0
- package/dist/cli/scan.d.ts.map +1 -0
- package/dist/cli/scan.js +62 -0
- package/dist/cli/scan.js.map +1 -0
- package/dist/cli/watch-i18n.d.ts +2 -0
- package/dist/cli/watch-i18n.d.ts.map +1 -0
- package/dist/cli/watch-i18n.js +73 -0
- package/dist/cli/watch-i18n.js.map +1 -0
- package/dist/cli/watch.d.ts +2 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +147 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/core/i18nGenerator.d.ts +16 -0
- package/dist/core/i18nGenerator.d.ts.map +1 -0
- package/dist/core/i18nGenerator.js +139 -0
- package/dist/core/i18nGenerator.js.map +1 -0
- package/dist/core/projectScanner.d.ts +12 -0
- package/dist/core/projectScanner.d.ts.map +1 -0
- package/dist/core/projectScanner.js +53 -0
- package/dist/core/projectScanner.js.map +1 -0
- package/dist/core/stringExtractor.d.ts +21 -0
- package/dist/core/stringExtractor.d.ts.map +1 -0
- package/dist/core/stringExtractor.js +268 -0
- package/dist/core/stringExtractor.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
- package/src/cli/generate.ts +422 -0
- package/src/cli/index.ts +50 -0
- package/src/cli/init.ts +96 -0
- package/src/cli/report.ts +160 -0
- package/src/cli/scan.ts +69 -0
- package/src/cli/watch-i18n.ts +77 -0
- package/src/cli/watch.ts +129 -0
- package/src/core/i18nGenerator.ts +127 -0
- package/src/core/projectScanner.ts +62 -0
- package/src/core/stringExtractor.ts +276 -0
- package/src/index.ts +7 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateCommand = generateCommand;
|
|
40
|
+
const fs_1 = require("fs");
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const i18nGenerator_1 = require("../core/i18nGenerator");
|
|
43
|
+
const projectScanner_1 = require("../core/projectScanner");
|
|
44
|
+
const stringExtractor_1 = require("../core/stringExtractor");
|
|
45
|
+
async function generateCommand() {
|
|
46
|
+
console.log(chalk_1.default.blue('š Generating i18n files...'));
|
|
47
|
+
try {
|
|
48
|
+
// Automatically scan the project first
|
|
49
|
+
console.log(chalk_1.default.cyan('š Scanning project for UI text strings...'));
|
|
50
|
+
const scanner = new projectScanner_1.ProjectScanner();
|
|
51
|
+
const files = await scanner.scanProject('./src');
|
|
52
|
+
const extractor = new stringExtractor_1.StringExtractor();
|
|
53
|
+
const strings = await extractor.extractStrings(files);
|
|
54
|
+
if (strings.length === 0) {
|
|
55
|
+
console.log(chalk_1.default.yellow('ā ļø No UI text strings found in the project.'));
|
|
56
|
+
console.log(chalk_1.default.gray('š” Make sure your React components have text content to extract.'));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
console.log(chalk_1.default.green(`ā
Found ${strings.length} UI text strings`));
|
|
60
|
+
// Save extracted strings for future use
|
|
61
|
+
await fs_1.promises.mkdir('.transcripto', { recursive: true });
|
|
62
|
+
await fs_1.promises.writeFile('.transcripto/extracted-strings.json', JSON.stringify(strings, null, 2), 'utf-8');
|
|
63
|
+
// Check if lingo.dev is configured
|
|
64
|
+
const hasLingoDevConfig = await checkLingoDevConfig();
|
|
65
|
+
if (!hasLingoDevConfig) {
|
|
66
|
+
console.log(chalk_1.default.yellow('\nš Lingo.dev Setup Required'));
|
|
67
|
+
console.log(chalk_1.default.white('Setting up lingo.dev for AI translations...\n'));
|
|
68
|
+
// Setup lingo.dev automatically
|
|
69
|
+
await setupLingoDev();
|
|
70
|
+
}
|
|
71
|
+
// Get language configuration from user
|
|
72
|
+
const languageConfig = await getLanguageConfiguration();
|
|
73
|
+
// Generate i18n files (only JSON, no constants)
|
|
74
|
+
const generator = new i18nGenerator_1.I18nGenerator();
|
|
75
|
+
await generator.generateI18nFiles(strings, languageConfig);
|
|
76
|
+
// Generate lingo.dev config with automatic language handling
|
|
77
|
+
await generator.generateLingoDevConfig(); // Let lingo.dev decide target languages
|
|
78
|
+
// Generate welcome.md with extracted text
|
|
79
|
+
await generateWelcomeFile(strings, languageConfig);
|
|
80
|
+
console.log(chalk_1.default.green(`ā
Generated i18n files for ${strings.length} strings`));
|
|
81
|
+
console.log(chalk_1.default.gray(`š Translations: ${languageConfig.outputDir}/`));
|
|
82
|
+
console.log(chalk_1.default.gray(`š Languages: ${languageConfig.languages.join(', ')}`));
|
|
83
|
+
// Run lingo.dev automatically
|
|
84
|
+
console.log(chalk_1.default.cyan('š Running lingo.dev for translations...'));
|
|
85
|
+
try {
|
|
86
|
+
await generator.runLingoDev();
|
|
87
|
+
console.log(chalk_1.default.green('ā
lingo.dev translations completed!'));
|
|
88
|
+
// Ask if user wants to create language dropdown (now automatic)
|
|
89
|
+
const shouldCreateDropdown = true; // Always create dropdown
|
|
90
|
+
await createLanguageDropdown(languageConfig);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
console.log(chalk_1.default.yellow('ā ļø lingo.dev failed. You can run "npx lingo.dev@latest run" manually.'));
|
|
94
|
+
}
|
|
95
|
+
console.log(chalk_1.default.cyan('\nšÆ Next steps:'));
|
|
96
|
+
console.log(chalk_1.default.white(' npm start - Test your localized application'));
|
|
97
|
+
console.log(chalk_1.default.gray('š” Text is ready for translation. Use constants in your React components.'));
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error(chalk_1.default.red('ā Generation failed:'), error);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function checkLingoDevConfig() {
|
|
105
|
+
try {
|
|
106
|
+
await fs_1.promises.access('.lingodev.json');
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function setupLingoDev() {
|
|
114
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
115
|
+
const rl = readline.createInterface({
|
|
116
|
+
input: process.stdin,
|
|
117
|
+
output: process.stdout
|
|
118
|
+
});
|
|
119
|
+
console.log(chalk_1.default.cyan('š Lingo.dev API Setup'));
|
|
120
|
+
return new Promise((resolve) => {
|
|
121
|
+
const askForApiKey = () => {
|
|
122
|
+
rl.question(chalk_1.default.white('Do you have a lingo.dev API key? (Y/n): '), async (answer) => {
|
|
123
|
+
const hasKey = answer.trim().toLowerCase() !== 'n' && answer.trim().toLowerCase() !== 'no';
|
|
124
|
+
if (hasKey) {
|
|
125
|
+
rl.question(chalk_1.default.white('Enter your lingo.dev API key: '), async (apiKey) => {
|
|
126
|
+
if (apiKey.trim()) {
|
|
127
|
+
// Save API key to environment
|
|
128
|
+
await saveApiKey(apiKey.trim());
|
|
129
|
+
console.log(chalk_1.default.green('ā
API key saved!'));
|
|
130
|
+
rl.close();
|
|
131
|
+
resolve();
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.log(chalk_1.default.red('ā API key cannot be empty'));
|
|
135
|
+
askForApiKey();
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
rl.question(chalk_1.default.white('Would you like to create an account and get API key? (Y/n): '), async (answer) => {
|
|
141
|
+
if (answer.trim().toLowerCase() !== 'n' && answer.trim().toLowerCase() !== 'no') {
|
|
142
|
+
console.log(chalk_1.default.cyan('š Opening lingo.dev to create account...'));
|
|
143
|
+
console.log(chalk_1.default.white('Please get your API key from: https://lingo.dev/dashboard'));
|
|
144
|
+
console.log(chalk_1.default.white('After getting your API key, run "transcripto generate" again.\n'));
|
|
145
|
+
// Open browser (simplified - in production use 'open' package)
|
|
146
|
+
const { spawn } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
147
|
+
spawn('start', ['https://lingo.dev/dashboard'], { detached: true });
|
|
148
|
+
}
|
|
149
|
+
rl.close();
|
|
150
|
+
resolve();
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
askForApiKey();
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
async function saveApiKey(apiKey) {
|
|
159
|
+
const envContent = `# Transcripto Configuration
|
|
160
|
+
LINGO_DEV_API_KEY=${apiKey}
|
|
161
|
+
`;
|
|
162
|
+
await fs_1.promises.writeFile('.env', envContent, 'utf-8');
|
|
163
|
+
}
|
|
164
|
+
async function generateWelcomeFile(strings, config) {
|
|
165
|
+
const welcomeContent = `# Welcome to Your Localized Project!
|
|
166
|
+
|
|
167
|
+
This file contains all the text strings that were extracted from your project.
|
|
168
|
+
|
|
169
|
+
## š Extraction Summary
|
|
170
|
+
- **Total Strings**: ${strings.length}
|
|
171
|
+
- **Target Languages**: ${config.languages.join(', ')}
|
|
172
|
+
- **Generated**: ${new Date().toLocaleString()}
|
|
173
|
+
|
|
174
|
+
## š Extracted Text Strings
|
|
175
|
+
|
|
176
|
+
${strings.map((str, index) => `${index + 1}. **${str.key}**\n \`${str.text}\`\n Location: ${str.filePath}:${str.line || 'unknown'}\n`).join('\n')}
|
|
177
|
+
|
|
178
|
+
## š Next Steps
|
|
179
|
+
|
|
180
|
+
1. **Review Translations**: Check the generated translation files in \`${config.outputDir}\`
|
|
181
|
+
2. **Test Language Switching**: Use the language dropdown to verify functionality
|
|
182
|
+
3. **Deploy**: Your project is now ready for multi-language deployment!
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
*Generated by Transcripto - Automated Localization CLI*
|
|
187
|
+
*Learn more: https://github.com/brrashmi408-sys/transcripto-npm*
|
|
188
|
+
`;
|
|
189
|
+
await fs_1.promises.writeFile('welcome.md', welcomeContent, 'utf-8');
|
|
190
|
+
console.log(chalk_1.default.green('š Created welcome.md with extracted text'));
|
|
191
|
+
}
|
|
192
|
+
async function createLanguageDropdown(config) {
|
|
193
|
+
const dropdownContent = `import React, { useState, useEffect } from 'react';
|
|
194
|
+
|
|
195
|
+
interface LanguageOption {
|
|
196
|
+
code: string;
|
|
197
|
+
name: string;
|
|
198
|
+
flag: string;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const languages: LanguageOption[] = [
|
|
202
|
+
{ code: '${config.languages[0] || 'en'}', name: 'English', flag: 'šŗšø' },
|
|
203
|
+
${config.languages.slice(1).map((lang) => ` { code: '${lang}', name: '${lang}', flag: 'š' },`).join('\n')}
|
|
204
|
+
];
|
|
205
|
+
|
|
206
|
+
export const LanguageDropdown: React.FC = () => {
|
|
207
|
+
const [currentLang, setCurrentLang] = useState('${config.languages[0] || 'en'}');
|
|
208
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
209
|
+
|
|
210
|
+
useEffect(() => {
|
|
211
|
+
// Load saved language preference
|
|
212
|
+
const saved = localStorage.getItem('language');
|
|
213
|
+
if (saved && languages.find(l => l.code === saved)) {
|
|
214
|
+
setCurrentLang(saved);
|
|
215
|
+
}
|
|
216
|
+
}, []);
|
|
217
|
+
|
|
218
|
+
const handleLanguageChange = (langCode: string) => {
|
|
219
|
+
setCurrentLang(langCode);
|
|
220
|
+
localStorage.setItem('language', langCode);
|
|
221
|
+
|
|
222
|
+
// Reload page with new language
|
|
223
|
+
window.location.reload();
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
const currentLanguage = languages.find(l => l.code === currentLang);
|
|
227
|
+
|
|
228
|
+
return (
|
|
229
|
+
<div style={{
|
|
230
|
+
position: 'fixed',
|
|
231
|
+
top: '20px',
|
|
232
|
+
right: '20px',
|
|
233
|
+
zIndex: 1000
|
|
234
|
+
}}>
|
|
235
|
+
<button
|
|
236
|
+
onClick={() => setIsOpen(!isOpen)}
|
|
237
|
+
style={{
|
|
238
|
+
padding: '8px 16px',
|
|
239
|
+
border: '1px solid #ddd',
|
|
240
|
+
borderRadius: '6px',
|
|
241
|
+
background: 'white',
|
|
242
|
+
cursor: 'pointer',
|
|
243
|
+
fontSize: '14px',
|
|
244
|
+
display: 'flex',
|
|
245
|
+
alignItems: 'center',
|
|
246
|
+
gap: '8px',
|
|
247
|
+
boxShadow: '0 2px 4px rgba(0,0,0,0.1)'
|
|
248
|
+
}}
|
|
249
|
+
>
|
|
250
|
+
<span>{currentLanguage?.flag}</span>
|
|
251
|
+
<span>{currentLanguage?.name}</span>
|
|
252
|
+
<span style={{ marginLeft: '4px' }}>ā¼</span>
|
|
253
|
+
</button>
|
|
254
|
+
|
|
255
|
+
{isOpen && (
|
|
256
|
+
<div style={{
|
|
257
|
+
position: 'absolute',
|
|
258
|
+
top: '100%',
|
|
259
|
+
right: '0',
|
|
260
|
+
background: 'white',
|
|
261
|
+
border: '1px solid #ddd',
|
|
262
|
+
borderRadius: '6px',
|
|
263
|
+
boxShadow: '0 4px 6px rgba(0,0,0,0.1)',
|
|
264
|
+
zIndex: 1000,
|
|
265
|
+
minWidth: '200px',
|
|
266
|
+
marginTop: '4px'
|
|
267
|
+
}}>
|
|
268
|
+
{languages.map(lang => (
|
|
269
|
+
<button
|
|
270
|
+
key={lang.code}
|
|
271
|
+
onClick={() => handleLanguageChange(lang.code)}
|
|
272
|
+
style={{
|
|
273
|
+
padding: '12px 16px',
|
|
274
|
+
border: 'none',
|
|
275
|
+
background: 'transparent',
|
|
276
|
+
textAlign: 'left',
|
|
277
|
+
cursor: 'pointer',
|
|
278
|
+
display: 'flex',
|
|
279
|
+
alignItems: 'center',
|
|
280
|
+
gap: '8px',
|
|
281
|
+
width: '100%'
|
|
282
|
+
}}
|
|
283
|
+
>
|
|
284
|
+
<span>{lang.flag}</span>
|
|
285
|
+
<span>{lang.name}</span>
|
|
286
|
+
{lang.code === currentLang && <span style={{ marginLeft: 'auto' }}>ā</span>}
|
|
287
|
+
</button>
|
|
288
|
+
))}
|
|
289
|
+
</div>
|
|
290
|
+
)}
|
|
291
|
+
</div>
|
|
292
|
+
);
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
export default LanguageDropdown;
|
|
296
|
+
`;
|
|
297
|
+
await fs_1.promises.writeFile('LanguageDropdown.tsx', dropdownContent, 'utf-8');
|
|
298
|
+
console.log(chalk_1.default.green('šØ Created LanguageDropdown.tsx component'));
|
|
299
|
+
console.log(chalk_1.default.cyan('\nš How to use the language dropdown:'));
|
|
300
|
+
console.log(chalk_1.default.white('1. Copy LanguageDropdown.tsx to your project'));
|
|
301
|
+
console.log(chalk_1.default.white('2. Import and add to your main page/layout:'));
|
|
302
|
+
console.log(chalk_1.default.white(' import LanguageDropdown from "./components/LanguageDropdown";'));
|
|
303
|
+
console.log(chalk_1.default.white('3. Add to your App.tsx or layout:'));
|
|
304
|
+
console.log(chalk_1.default.white(' <LanguageDropdown />'));
|
|
305
|
+
console.log(chalk_1.default.white('4. The dropdown will automatically switch languages and reload page'));
|
|
306
|
+
console.log(chalk_1.default.white('5. Position: Fixed top-right corner for easy access'));
|
|
307
|
+
}
|
|
308
|
+
async function getLanguageConfiguration() {
|
|
309
|
+
console.log(chalk_1.default.cyan('\nš Language Configuration'));
|
|
310
|
+
// Skip language selection - let lingo.dev handle it completely automatically
|
|
311
|
+
console.log(chalk_1.default.yellow('š¤ Letting lingo.dev handle language selection completely automatically...'));
|
|
312
|
+
// Use default configuration - only English for now, lingo.dev will add more
|
|
313
|
+
const outputDir = './i18n'; // Changed to root folder
|
|
314
|
+
// Start with just English - lingo.dev will add target languages automatically
|
|
315
|
+
const languages = ['en'];
|
|
316
|
+
return {
|
|
317
|
+
outputDir,
|
|
318
|
+
languages,
|
|
319
|
+
keyPrefix: ''
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
async function promptForLanguage(message, defaultValue) {
|
|
323
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
324
|
+
const rl = readline.createInterface({
|
|
325
|
+
input: process.stdin,
|
|
326
|
+
output: process.stdout
|
|
327
|
+
});
|
|
328
|
+
return new Promise((resolve) => {
|
|
329
|
+
rl.question(`${message} (${defaultValue}): `, (answer) => {
|
|
330
|
+
rl.close();
|
|
331
|
+
resolve(answer.trim() || defaultValue);
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
async function promptForTargetLanguages() {
|
|
336
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
337
|
+
const rl = readline.createInterface({
|
|
338
|
+
input: process.stdin,
|
|
339
|
+
output: process.stdout
|
|
340
|
+
});
|
|
341
|
+
console.log(chalk_1.default.yellow('\nAvailable language codes:'));
|
|
342
|
+
console.log(chalk_1.default.white(' en - English'));
|
|
343
|
+
console.log(chalk_1.default.white(' hi - Hindi'));
|
|
344
|
+
console.log(chalk_1.default.white(' kn - Kannada'));
|
|
345
|
+
console.log(chalk_1.default.white(' es - Spanish'));
|
|
346
|
+
console.log(chalk_1.default.white(' fr - French'));
|
|
347
|
+
console.log(chalk_1.default.white(' de - German'));
|
|
348
|
+
console.log(chalk_1.default.white(' zh - Chinese'));
|
|
349
|
+
console.log(chalk_1.default.white(' ja - Japanese'));
|
|
350
|
+
console.log(chalk_1.default.white(' ta - Tamil'));
|
|
351
|
+
console.log(chalk_1.default.white(' te - Telugu'));
|
|
352
|
+
console.log(chalk_1.default.white(' ml - Malayalam'));
|
|
353
|
+
console.log(chalk_1.default.white(' mr - Marathi'));
|
|
354
|
+
console.log(chalk_1.default.white(' gu - Gujarati'));
|
|
355
|
+
console.log(chalk_1.default.white(' bn - Bengali'));
|
|
356
|
+
console.log(chalk_1.default.white(' pa - Punjabi'));
|
|
357
|
+
console.log(chalk_1.default.white(' ur - Urdu'));
|
|
358
|
+
console.log(chalk_1.default.white(' ar - Arabic'));
|
|
359
|
+
console.log(chalk_1.default.white(' pt - Portuguese'));
|
|
360
|
+
console.log(chalk_1.default.white(' it - Italian'));
|
|
361
|
+
console.log(chalk_1.default.white(' ru - Russian'));
|
|
362
|
+
return new Promise((resolve) => {
|
|
363
|
+
rl.question('\nEnter target languages (comma-separated, e.g., hi,kn,es,fr): ', (answer) => {
|
|
364
|
+
rl.close();
|
|
365
|
+
const languages = answer.split(',')
|
|
366
|
+
.map(lang => lang.trim().toLowerCase())
|
|
367
|
+
.filter(lang => lang.length > 0);
|
|
368
|
+
resolve(languages.length > 0 ? languages : ['hi', 'kn']);
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
async function promptForOutputDirectory() {
|
|
373
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
374
|
+
const rl = readline.createInterface({
|
|
375
|
+
input: process.stdin,
|
|
376
|
+
output: process.stdout
|
|
377
|
+
});
|
|
378
|
+
return new Promise((resolve) => {
|
|
379
|
+
rl.question('Output directory for translation files (./src/i18n): ', (answer) => {
|
|
380
|
+
rl.close();
|
|
381
|
+
resolve(answer.trim() || './src/i18n');
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
async function promptForConstantsFile(outputDir) {
|
|
386
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline')));
|
|
387
|
+
const rl = readline.createInterface({
|
|
388
|
+
input: process.stdin,
|
|
389
|
+
output: process.stdout
|
|
390
|
+
});
|
|
391
|
+
return new Promise((resolve) => {
|
|
392
|
+
rl.question(`Constants file path (${outputDir}/constants.ts): `, (answer) => {
|
|
393
|
+
rl.close();
|
|
394
|
+
resolve(answer.trim() || `${outputDir}/constants.ts`);
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
async function askToRunLingoDev() {
|
|
399
|
+
// Always return true to run lingo.dev automatically
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
async function askToCreateDropdown() {
|
|
403
|
+
// Always return true to create language dropdown automatically
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
async function loadExtractedStrings() {
|
|
407
|
+
try {
|
|
408
|
+
const content = await fs_1.promises.readFile('.transcripto/extracted-strings.json', 'utf-8');
|
|
409
|
+
return JSON.parse(content);
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
console.warn(chalk_1.default.yellow('ā ļø No extracted strings found. Run "transcripto scan" first.'));
|
|
413
|
+
return [];
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const generate_1 = require("./generate");
|
|
6
|
+
const init_1 = require("./init");
|
|
7
|
+
const report_1 = require("./report");
|
|
8
|
+
const scan_1 = require("./scan");
|
|
9
|
+
const watch_1 = require("./watch");
|
|
10
|
+
const watch_i18n_1 = require("./watch-i18n");
|
|
11
|
+
const program = new commander_1.Command();
|
|
12
|
+
program
|
|
13
|
+
.name('transcripto')
|
|
14
|
+
.description('Automated localization CLI that scans projects and generates i18n files')
|
|
15
|
+
.version('1.1.5');
|
|
16
|
+
program
|
|
17
|
+
.command('init')
|
|
18
|
+
.description('Initialize Transcripto in your project')
|
|
19
|
+
.option('--yes', 'Run in non-interactive mode')
|
|
20
|
+
.action(init_1.initCommand);
|
|
21
|
+
program
|
|
22
|
+
.command('scan')
|
|
23
|
+
.description('Scan project for UI text strings')
|
|
24
|
+
.action(scan_1.scanCommand);
|
|
25
|
+
program
|
|
26
|
+
.command('generate')
|
|
27
|
+
.description('Generate i18n translation files')
|
|
28
|
+
.action(generate_1.generateCommand);
|
|
29
|
+
program
|
|
30
|
+
.command('watch')
|
|
31
|
+
.description('Watch project files for changes and auto-generate i18n')
|
|
32
|
+
.option('--yes', 'Run in non-interactive mode')
|
|
33
|
+
.action(watch_1.watchCommand);
|
|
34
|
+
program
|
|
35
|
+
.command('watch-i18n')
|
|
36
|
+
.description('Watch i18n/en.json file for changes and auto-translate')
|
|
37
|
+
.action(watch_i18n_1.watchI18nCommand);
|
|
38
|
+
program
|
|
39
|
+
.command('report')
|
|
40
|
+
.description('Show localization coverage report')
|
|
41
|
+
.action(report_1.reportCommand);
|
|
42
|
+
program.parse();
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,yCAA6C;AAC7C,iCAAqC;AACrC,qCAAyC;AACzC,iCAAqC;AACrC,mCAAuC;AACvC,6CAAgD;AAEhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;KAC9C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,0BAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;KAC9C,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,6BAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FlE"}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initCommand = initCommand;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
async function initCommand(options = {}) {
|
|
10
|
+
console.log(chalk_1.default.blue('š Initializing Transcripto in your project...'));
|
|
11
|
+
const yes = options.yes || false;
|
|
12
|
+
if (yes) {
|
|
13
|
+
console.log(chalk_1.default.yellow('š¤ Running in non-interactive mode (--yes)'));
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
// Create .transcripto directory
|
|
17
|
+
await fs_1.promises.mkdir('.transcripto', { recursive: true });
|
|
18
|
+
// Create config file
|
|
19
|
+
const config = {
|
|
20
|
+
version: '1.1.5',
|
|
21
|
+
scan: {
|
|
22
|
+
extensions: ['.ts', '.tsx', '.js', '.jsx', '.html'],
|
|
23
|
+
exclude: ['node_modules', 'dist', 'build', '.git', 'coverage', 'src/i18n'],
|
|
24
|
+
minStringLength: 2
|
|
25
|
+
},
|
|
26
|
+
i18n: {
|
|
27
|
+
outputDir: './src/i18n',
|
|
28
|
+
languages: ['en', 'hi', 'es', 'fr'],
|
|
29
|
+
constantsFile: './src/i18n/constants.ts',
|
|
30
|
+
keyPrefix: ''
|
|
31
|
+
},
|
|
32
|
+
replacement: {
|
|
33
|
+
importPath: './i18n/constants',
|
|
34
|
+
importName: 'TEXT',
|
|
35
|
+
functionName: 't'
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
await fs_1.promises.writeFile('.transcripto/config.json', JSON.stringify(config, null, 2), 'utf-8');
|
|
39
|
+
// Create i18n directory structure
|
|
40
|
+
await fs_1.promises.mkdir('./src/i18n', { recursive: true });
|
|
41
|
+
// Create initial i18n helper
|
|
42
|
+
const helperContent = `// Transcripto i18n helper
|
|
43
|
+
import { TEXT } from './constants';
|
|
44
|
+
|
|
45
|
+
export function t(key: keyof typeof TEXT): string {
|
|
46
|
+
// In a real app, you would use the current locale
|
|
47
|
+
// For now, return English text
|
|
48
|
+
return TEXT[key] as string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function setLocale(locale: string): void {
|
|
52
|
+
// TODO: Implement locale switching
|
|
53
|
+
console.log(\`Locale set to: \${locale}\`);
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
await fs_1.promises.writeFile('./src/i18n/index.ts', helperContent, 'utf-8');
|
|
57
|
+
// Create empty constants file
|
|
58
|
+
const constantsContent = `// Auto-generated localization constants
|
|
59
|
+
export const TEXT = {};
|
|
60
|
+
|
|
61
|
+
export type TextKey = keyof typeof TEXT;
|
|
62
|
+
`;
|
|
63
|
+
await fs_1.promises.writeFile('./src/i18n/constants.ts', constantsContent, 'utf-8');
|
|
64
|
+
// Create empty translation files
|
|
65
|
+
for (const lang of config.i18n.languages) {
|
|
66
|
+
await fs_1.promises.writeFile(`./src/i18n/${lang}.json`, JSON.stringify({}, null, 2), 'utf-8');
|
|
67
|
+
}
|
|
68
|
+
console.log(chalk_1.default.green('ā
Transcripto initialized successfully!'));
|
|
69
|
+
console.log(chalk_1.default.gray('š Created .transcripto/config.json'));
|
|
70
|
+
console.log(chalk_1.default.gray('š Created src/i18n/ directory structure'));
|
|
71
|
+
console.log(chalk_1.default.yellow('\nšÆ Next steps:'));
|
|
72
|
+
console.log(chalk_1.default.white(' transcripto scan - Scan for UI text strings'));
|
|
73
|
+
console.log(chalk_1.default.white(' transcripto generate - Generate i18n files'));
|
|
74
|
+
console.log(chalk_1.default.white(' transcripto replace - Replace inline text with constants'));
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error(chalk_1.default.red('ā Initialization failed:'), error);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAaA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAWnD"}
|