cleanInvalidEntries static method

void cleanInvalidEntries(
  1. String filePath
)

Clean ARB file by removing entries with invalid ICU syntax (Dart interpolation)

Implementation

static void cleanInvalidEntries(String filePath) {
  final file = File(filePath);
  if (!file.existsSync()) {
    print('ARB file does not exist: $filePath');
    return;
  }

  try {
    final content = file.readAsStringSync();
    final arbData = jsonDecode(content) as Map<String, dynamic>;

    // Pattern to detect Dart string interpolation
    final dartInterpolationPattern = RegExp(r'\$\{[^}]+\}');

    final keysToRemove = <String>[];

    // Find entries with invalid ICU syntax
    arbData.forEach((key, value) {
      if (value is String && dartInterpolationPattern.hasMatch(value)) {
        keysToRemove.add(key);
        print('Found invalid ICU syntax in key "$key": $value');
      }
    });

    // Remove invalid entries
    if (keysToRemove.isNotEmpty) {
      for (final key in keysToRemove) {
        arbData.remove(key);
        // Also remove associated metadata if it exists
        arbData.remove('@$key');
      }

      // Write cleaned ARB file
      final cleanedContent = JsonEncoder.withIndent('  ').convert(arbData);
      file.writeAsStringSync(cleanedContent);

      print(
          '✅ Cleaned ${keysToRemove.length} invalid entries from $filePath');
      print('Removed keys: ${keysToRemove.join(', ')}');
    } else {
      print('✅ No invalid entries found in $filePath');
    }
  } catch (e) {
    print('❌ Error cleaning ARB file: $e');
  }
}