translateToLanguage function

Future<void> translateToLanguage()

Implementation

Future<void> translateToLanguage() async {
  DartgenxConfig config = DartgenxConfig.load();

  String? inputFilePath;
  if (config.outputPath?.translations?.inputDestination == null) {
    inputFilePath = Input(
      prompt: 'Enter the full path to the translations file.',
    ).interact();
  } else {
    inputFilePath = config.outputPath?.translations?.inputDestination ?? "";
  }

  final inputFile = File(inputFilePath);

  if (!inputFile.existsSync()) {
    ConsoleLog.error('Input file not found: $inputFilePath');
    return;
  }

  final content = await inputFile.readAsString();
  final Map<String, dynamic> data = jsonDecode(content);

  List<String> translationLanguage = [];
  if (config.outputPath?.translations?.language == null) {
    final input = Input(
      prompt: 'Enter the output language codes (eg. en, hi, mr): ',
    ).interact();
    translationLanguage = input.split(',').map((e) => e.trim()).toList();
  } else {
    translationLanguage = config.outputPath?.translations?.language ?? [];
  }

  if (translationLanguage.isEmpty) {
    ConsoleLog.error('Please enter language to translate into');
    return;
  }

  for (var lang in translationLanguage) {
    final buffer = await translateFile(
      data: data,
      translateFrom: config.outputPath?.translations?.sourceLanguage,
      translateTo: lang,
    );

    final outputFilePath = p.join(
      config.outputPath?.translations?.outputDestination ?? p.dirname(inputFilePath),
      '$lang${config.outputPath?.translations?.outputFileExtension ?? '.json'}',
    );

    final outputFile = File(outputFilePath);

    outputFile.createSync(recursive: true);

    outputFile.writeAsStringSync(buffer.toString());
  }

  bool generateKeys = false;
  if (config.outputPath?.translations?.generateTranslationKeys == null) {
    final input =
        Input(prompt: 'Do you also want to generate translations keys (Y/n): ', defaultValue: 'Y')
            .interact();
    generateKeys = input.toLowerCase() == "y";
  } else {
    generateKeys = config.outputPath?.translations?.generateTranslationKeys ?? false;
  }

  if (generateKeys) {
    final buffer = StringBuffer();
    buffer.writeln('class TranslationKeys {');
    buffer.writeln('  TranslationKeys._();\n');
    for (final key in data.keys) {
      buffer.writeln('  static const String ${ProjectUtils.toCamelCase(key)} = "$key";');
    }
    buffer.writeln('}');

    final translationKeysFile = File(config.outputPath?.translations?.translationKeysLocation ??
        'lib/localization/translation_keys.dart');

    translationKeysFile.createSync(recursive: true);
    translationKeysFile.writeAsStringSync(buffer.toString());
  }

  ConsoleLog.success('Translation is completed.');
}