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