generateLocalizations static method

Future<Map<String, Map<String, dynamic>>> generateLocalizations({
  1. required String enAssetPath,
  2. required List<String> targetLanguages,
  3. dynamic onProgress(
    1. String language,
    2. String status
    )?,
  4. int delayBetweenTranslations = 200,
})

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