generateMultipleLanguages method
Generates ARB files for multiple target languages.
Processes translations concurrently with proper throttling to respect API rate limits.
sourcePath
: The path to the source ARB file.
targetLanguages
: List of target language codes.
overwrite
: Whether to overwrite existing files.
Returns a Future<Map<String, String>> mapping language codes to generated file paths.
Implementation
Future<Map<String, String>> generateMultipleLanguages(
String sourcePath,
List<String> targetLanguages, {
bool overwrite = true,
}) async {
_logger.info(
'Starting batch translation for ${targetLanguages.length} languages',
);
final results = <String, String>{};
final errors = <String, String>{};
// Process languages in smaller batches to manage memory and API load
const batchSize = 3;
for (var i = 0; i < targetLanguages.length; i += batchSize) {
final batch = targetLanguages.skip(i).take(batchSize).toList();
final futures = batch.map((lang) async {
try {
final outputPath = await generateArbForLanguage(
sourcePath,
lang,
overwrite: overwrite,
);
return MapEntry(lang, outputPath);
} catch (e) {
_logger.error('Failed to generate ARB for $lang', e);
errors[lang] = e.toString();
return MapEntry(lang, ''); // Empty path indicates failure
}
});
final batchResults = await Future.wait(futures);
for (final result in batchResults) {
if (result.value.isNotEmpty) {
results[result.key] = result.value;
}
}
}
if (errors.isNotEmpty) {
_logger.warning('Some translations failed: ${errors.keys.join(', ')}');
}
_logger.success(
'Batch translation completed: ${results.length} successful, ${errors.length} failed',
);
return results;
}