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);
}