generateLocalizations static method
Generates localization files from English source - 100% FREE
enAssetPath - Asset path to the English JSON file (e.g., 'assets/l10n/en.json')
targetLanguages - List of language codes (e.g., 'ar', 'de', 'fr', 'es')
onProgress - Optional callback to track progress
delayBetweenTranslations - Delay in milliseconds between translations (default: 200ms)
Returns a Map with language codes as keys and translated JSON as values
Implementation
static Future<Map<String, Map<String, dynamic>>> generateLocalizations({
required String enAssetPath,
required List<String> targetLanguages,
Function(String language, String status)? onProgress,
int delayBetweenTranslations = 200,
}) async {
// Ensure Flutter bindings are initialized
WidgetsFlutterBinding.ensureInitialized();
try {
onProgress?.call('en', 'Reading English file...');
// Read the English JSON file from assets
final enContent = await rootBundle.loadString(enAssetPath);
final Map<String, dynamic> enJson = jsonDecode(enContent);
if (kDebugMode) {
print('🌍 Starting localization generation...');
print('📝 Source: $enAssetPath');
print('🎯 Target languages: ${targetLanguages.join(", ")}');
print('🔧 API: Free Translate API (ftapi.pythonanywhere.com)');
print('');
}
final results = <String, Map<String, dynamic>>{};
// Generate translations for each language
for (final langCode in targetLanguages) {
onProgress?.call(langCode, 'Translating...');
if (kDebugMode) {
print('🔄 Translating to $langCode...');
}
final translatedJson = await _translateJson(
enJson,
langCode,
delayBetweenTranslations,
);
results[langCode] = translatedJson;
onProgress?.call(langCode, 'Completed');
if (kDebugMode) {
print('✅ Generated: $langCode.json');
}
}
if (kDebugMode) {
print('');
print('🎉 Localization generation completed successfully!');
}
return results;
} catch (e) {
if (kDebugMode) {
print('❌ Error: $e');
}
rethrow;
}
}