cleanInvalidEntries static method
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');
}
}