generateTranslationFiles function
Future<void>
generateTranslationFiles(
)
Implementation
Future<void> generateTranslationFiles() async {
final libDir = Directory('${Directory.current.path}/lib');
if (!libDir.existsSync()) {
ConsoleLog.error('No lib folder found. Run inside Flutter project root.');
exit(1);
}
final localeKeysFile = File(p.join(libDir.path, 'locale_keys.dart'));
if (!localeKeysFile.existsSync()) {
ConsoleLog.error('locale_keys.dart not found. Run locale key generator first.');
return;
}
// Ask user which translation files to generate
final input = Input(
prompt: 'Enter translation file names (comma separated, e.g. en,mr,hi):',
validator: (value) {
if (value.trim().isEmpty) {
return false;
}
final files = value.split(',').map((e) => e.trim());
if (files.any((e) => e.isEmpty)) {
return false;
}
// Optional: only allow letters (no numbers/symbols) for file names
if (files.any((e) => !RegExp(r'^[a-zA-Z]+$').hasMatch(e))) {
return false;
}
return true;
},
defaultValue: 'en'
).interact();
final files = input.split(',').map((e) => e.trim()).where((e) => e.isNotEmpty).toList();
if (files.isEmpty) {
ConsoleLog.error('No translation files specified.');
return;
}
// Read locale keys
final content = localeKeysFile.readAsStringSync();
final keyPattern = RegExp(r'static const String (\w+) =');
final keys = <String>[];
for (final match in keyPattern.allMatches(content)) {
keys.add(match.group(1)!);
}
if (keys.isEmpty) {
ConsoleLog.error('ℹ️ No keys found in locale_keys.dart.');
return;
}
// Generate translation file for each language
for (final fileName in files) {
final file = File(p.join(libDir.path, '$fileName.dart'));
final buffer = StringBuffer()
..write(ProjectUtils.fileGenerationString)
..writeln("import 'locale_keys.dart';\n")
..writeln('final Map<String, String> $fileName = {');
for (final key in keys) {
buffer.writeln(" LocaleKeys.$key : '',"); // empty value for manual translation
}
buffer.writeln('};');
file.writeAsStringSync(buffer.toString());
ConsoleLog.success('Generated $fileName.dart with ${keys.length} keys.');
}
await generateTranslationService(files);
}